2013-10-05 3 views
6

Когда я создаю файл XML со сценарием ASP Classic и импортирую XML-файл на страницу PHP, процесс импорта работает нормально.Ошибка PHP iconv

Но, когда я создаю тот же XML через PHP-скрипт (вместо ASP Classic) и использую его в том же процессе импорта, то он не работает.

$xml = iconv("UTF-16", "UTF-8", $xml); 

я заметил в моем процессе импорта:

  • до $xml = iconv("UTF-16", "UTF-8", $xml); линии в моем коде, файл XML в нужном формате.
  • Но после строки $xml = iconv("UTF-16", "UTF-8", $xml); файл XML поврежден.

Когда я комментирую эту строку кода и использую PHP-файл PHP, тогда он отлично работает.

+0

XML выполнен в формате Unicode с использованием сценария ASP Classic. И XML сделал либо «UTF-8», либо «ANSI» с PHP-скриптом. –

ответ

0

Что происходит, когда вы делаете:

$xml = iconv("UTF-16", "UTF-8//IGNORE", $xml); 

?

Если процесс не найден в указанной вами точке, то он не выполняет преобразование из UTF-16 в UTF-8, что означает, что у вас есть один или несколько символов во входной строке, которые не имеют UTF- 8. Флаг «// IGNORE» беззвучно удаляет эти символы, что явно плохо, но использование этого флага может помочь в определении того, что на самом деле проблема в том, что я думаю. Можно также попробовать транслитерации символов, которые не:

$xml = iconv("UTF-16", "UTF-8//TRANSLIT", $xml); 

Символы будут округлены, так что вы будете сохранять что-то, по крайней мере. См. Пример здесь: http://www.php.net/manual/en/function.iconv.php

Все это говорит о том, что UTF-16 является приемлемой кодировкой для содержимого XML. Почему вы хотите его преобразовать?

4

Ресурсы: PHP official site- SimpleXMLElement documentation

Если вы утверждаете, что есть ошибка в этой строке:

$xml = iconv("UTF-16", "UTF-8", $xml); 

затем изменить его на это, потому что $ XML, вероятно, не "UTF-16":

$xml = iconv(mb_detect_encoding($xml), "UTF-8", $xml); 

Чтобы сохранить файл XML:

//saving generated xml file 
$xml_student_info->asXML('file path and name'); 

Чтобы импортировать файл XML:

$url = "http://www.domain.com/users/file.xml"; 
$xml = simplexml_load_string(file_get_contents($url)); 

Если у вас есть массив следующим образом:

$test_array = array (
    'bla' => 'blub', 
    'foo' => 'bar', 
    'another_array' => array (
    'stack' => 'overflow', 
), 
); 

и вы хотите, чтобы преобразовать его в следующий XML:

<?xml version="1.0"?> 
<main_node> 
    <bla>blub</bla> 
    <foo>bar</foo> 
    <another_array> 
     <stack>overflow</stack> 
    </another_array> 
</main_node> 

то здесь код PHP:

<?php 

//make the array 
$test = array (
    'bla' => 'blub', 
    'foo' => 'bar', 
    'another_array' => array (
    'stack' => 'overflow', 
), 
); 

//make an XML object 
$xml_test = new SimpleXMLElement("<?xml version=\"1.0\"?><main_node></main_node>"); 

// function call to convert array to xml 
array_to_xml($test,$xml_test); 

//here's the function definition (array_to_xml) 
function array_to_xml($test, &$xml_test) { 
    foreach($test as $key => $value) { 
     if(is_array($value)) { 
      if(!is_numeric($key)){ 
       $subnode = $xml_test->addChild("$key"); 
       array_to_xml($value, $subnode); 
      } 
      else{ 
       $subnode = $xml_test->addChild("item$key"); 
       array_to_xml($value, $subnode); 
      } 
     } 
     else { 
      $xml_test->addChild("$key","$value"); 
     } 
    } 
} 

/we finally print it out 
print $xml_test->asXML(); 

?> 
Смежные вопросы