Iconv,发布数据和simpleXML

时间:2011-09-14 11:45:49

标签: php simplexml iconv

所以我在一些发布的XML上使用simplexml_load_string。但是我收到以下错误。

Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 8: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xA3 0x37 0x30 0x30 in map_view.php on line 7

页面以UTF8编码。我认为这可能是英镑符号? 我会iconv它还不知道当前的编码。

<?xml version="1.0" encoding="utf-8"?>
<documentContent>
  <property>
    <pic1 hiresURL="http://dmqa.briefyourmarket.com/management/house-sample.jpg" imgpath="http://dmqa.briefyourmarket.com/management/house-sample.jpg" />
    <postCode>de560db</postCode>
    <address>Chilly Road, Bingley, Oxon, OX17</address>
    <postcode>OX17 2HE</postcode>
    <price>£700,000</price>
  </property>
</documentContent>

4 个答案:

答案 0 :(得分:2)

英镑符号为0xC2 0xA3,为UTF-8;错误消息中报告的字节是ISO-8859-1字符:£ 7 0 0 ,所以我认为你的文件实际编码为ISO-8859-1,尽管声明指示UTF-8。

答案 1 :(得分:1)

查看我怀疑实际编码的字节是ISO-8859-1 a.k.a. Latin-1。这应该解决它:

iconv('ISO-8859-1' ,'UTF-8', $xml)

答案 2 :(得分:1)

您确定该文件是UTF-8编码的吗? 0xA3是用于对£中的ISO-8859-1符号进行编码的字节。 £应采用UTF-8编码0xC2 0xA3

答案 3 :(得分:0)

您已将文档转换为UTF-8,最简单的方法是使用utf8_encode($data)

例如:

$xmlInput = simplexml_load_string (utf8_encode(file_get_contents($file)));

如果您不知道当前的编码,请使用mb_detect_encoding(),例如:

$content = utf8_encode(file_get_contents($url_or_file));
$encoding = mb_detect_encoding($content);
$doc = new DOMdocument();
$res = $doc->loadXML("<?xml encoding='$encoding'>" . $content);

使用DOMDocument应该是:

$td->nodeValue = utf8_encode("&pound;");