所以我在一些发布的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>
答案 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("£");