2010-03-16 149 views
0

我无法找到原因,只能看到以下错误消息。 输入不正确的UTF-8,表明编码!字节:为0x00 0x5D 0x5D 0x3E的无法通过PHP读取XML

以下内容是我的PHP代码

$reader2 = new XMLReader(); 
$reader2->XML($xmlstring); 
$user_data=""; 

while ($reader2->read()) { 

    if ($reader2->name == "user_id" && $reader2->nodeType == XMLReader::ELEMENT) { 
     $reader2->read(); 
     $user_data .=$reader2->value; 
    } 


} 
$reader2->close(); 

以下是XML数据

<?xml version="1.0" encoding="UTF-8" ?> 
<SOAP:Envelope xmlns:SOAP="http://www.w3.org/2003/05/soap-envelope" > 
    <SOAP:Body > 
<user_id>1234567890</user_id> 
<greeting_name><![CDATA[ABCDEF ..yl/�]]></greeting_name> 
</SOAP:Body> 
</SOAP:Envelope> 

我尝试了很多办法,但仍无法找到解决方案。问候标签值可以是中文或英文单词。

+0

该CDATA末尾有一个NULL字节。修复生成该XML的所有内容,以便它不输出NULL字节,或者使用str_replace()将它们从文件中删除,并希望获得最佳效果。 – 2010-03-16 09:42:32

回答

1

并非所有字节序列都对utf-8中的字符进行编码。有一些序列没有意义,或者说 - 直截了当 - 是错误的。 xml解析器在输入文档中发现了这样一个错误的序列(声称是正确的utf-8编码)并且抱怨它。 xml文档需要修复。