PHP iconv错误
当我使用ASP经典脚本生成XML文件并在PHP页面中导入XML文件时,导入过程运行良好 但是,当我通过PHP脚本(而不是ASP Classic)生成相同的XML并在相同的导入过程中使用它时,它就不起作用了PHP iconv错误,php,xml,asp-classic,Php,Xml,Asp Classic,当我使用ASP经典脚本生成XML文件并在PHP页面中导入XML文件时,导入过程运行良好 但是,当我通过PHP脚本(而不是ASP Classic)生成相同的XML并在相同的导入过程中使用它时,它就不起作用了 $xml = iconv("UTF-16", "UTF-8", $xml); 我在导入过程中注意到: 在$xml=iconv(“UTF-16”、“UTF-8”和$xml)之前行在我的代码中,XML文件的格式是正确的 但是在$xml=iconv(“UTF-16”,“UTF-8”,“$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文件时,它工作得很好。当您这样做时会发生什么:
$xml = iconv("UTF-16", "UTF-8//IGNORE", $xml);
?
如果进程在您标识的点失败,则它无法从UTF-16转换为UTF-8,这意味着您的输入字符串中有一个或多个字符没有UTF-8表示形式。“//IGNORE”标志将悄悄地删除这些字符,这显然是不好的,但是使用该标志有助于确定问题是否确实存在。您还可以尝试音译失败的字符:
$xml = iconv("UTF-16", "UTF-8//TRANSLIT", $xml);
字符将是近似的,因此您至少会保留一些内容。请参见此处的示例:
综上所述,UTF-16是XML内容可接受的字符集。为什么要转换它?参考资料:
如果您声称此行有错误:
$xml = iconv("UTF-16", "UTF-8", $xml);
然后将其更改为此,因为$xml可能不是“UTF-16”:
要保存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();
?>
使用ASP经典脚本以unicode格式制作的XML。XML使用PHP脚本生成“UTF-8”或“ANSI”。
<?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();
?>