2013-10-05 14 views
6

Kiedy generuję plik XML ze skryptem ASP Classic i importuję plik XML na stronie PHP, proces importowania działa dobrze.Błąd iconv PHP

Ale kiedy generuję ten sam XML za pomocą skryptu PHP (zamiast ASP Classic) i używam go w tym samym procesie importowania, to nie działa.

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

zauważyłem w moim procesu importu:

  • przed linią w moim kodzie $xml = iconv("UTF-16", "UTF-8", $xml);, plik XML jest we właściwym formacie.
  • Ale po linii $xml = iconv("UTF-16", "UTF-8", $xml); plik XML jest uszkodzony.

Kiedy skomentuję ten wiersz kodu i korzystam z pliku XML PHP, to działa dobrze.

+0

XML w formacie Unicode ze skryptem ASP Classic. A XML zrobił albo "UTF-8", albo "ANSI" ze skryptem PHP. –

Odpowiedz

0

Co się dzieje, kiedy zrobić:

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

?

Jeśli proces zakończył się niepowodzeniem w zidentyfikowanym punkcie, oznacza to, że nie przechodzi on konwersji z UTF-16 na UTF-8, co oznacza, że ​​w łańcuchu wejściowym nie ma znaków UTF. 8 reprezentacji. Flaga "// IGNORE" po cichu zrzuci te znaki, co jest oczywiście złe, ale użycie tej flagi może być pomocne w określeniu, czy to, co moim zdaniem jest problemem, faktycznie ma miejsce. Możesz także spróbować transliterować znaki, które zawiodły:

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

Znaki będą przybliżone, więc przynajmniej coś zatrzymasz. Zobacz przykład tutaj: http://www.php.net/manual/en/function.iconv.php

Wszystko to powiedziawszy, UTF-16 jest akceptowalnym zestawem znaków dla treści XML. Dlaczego chcesz go przekonwertować?

4

Zasoby: PHP official site- SimpleXMLElement documentation

Jeśli twierdzą, że jest błąd w tej linii:

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

następnie zmienić go na to, bo $ xml nie jest chyba "UTF-16":

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

Aby zapisać plik XML:

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

Aby zaimportować plik XML:

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

Jeśli masz tablicę następująco:

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

i chcesz przekonwertować go do następnego XML:

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

następnie oto kod 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(); 

?>