Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP iconv错误_Php_Xml_Asp Classic - Fatal编程技术网

PHP iconv错误

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”

当我使用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文件已损坏

当我注释掉这行代码并使用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();

?>