2013-10-05 7 views
6

ASPクラシックスクリプトを使用してXMLファイルを生成し、そのXMLファイルをPHPページにインポートすると、インポートプロセスが正常に動作します。PHP iconvエラー

しかし、(ASP Classicの代わりに)PHPスクリプトを使用して同じXMLを生成し、それを同じインポートプロセスで使用すると、機能しません。

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

は、私は私のインポートプロセスに気づい:

  • 私のコードで$xml = iconv("UTF-16", "UTF-8", $xml);行の前に、XMLファイルが適切な形式です。
  • ただし、$xml = iconv("UTF-16", "UTF-8", $xml);行の後、XMLファイルが壊れています。

このコード行をコメントアウトしてPHP XMLファイルを使用すると、正常に動作します。あなたが行うとき

+0

XMLがASPクラシックスクリプトでUnicode形式で作成されました。 XMLはPHPスクリプトで "UTF-8"または "ANSI"のいずれかを作成しました。 –

答えて

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のは、おそらく "UTF-16" ではありませんので、

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

そして、このように変更しが:

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

$xml = iconv(mb_detect_encoding($xml), "UTF-8", $xml); 
は、XMLファイルを保存するには次のように配列を持っている場合は

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

は、XMLファイルをインポートするには

$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(); 

?> 
関連する問題