不被限定用SimpleXML和实体问题(Problem with simpleXML and ent

2019-07-18 02:20发布

我试图解析XML文件,但是加载它的SimpleXML打印以下警告时:

警告:使用simplexml_load_file()[function.simplexml负荷文件]:gpr_545.xml:55:分析器错误:实体 'Oslash' 在import.php未定义线路35上

这是该行:

<forenames>B&Oslash;IE</forenames><x> </x>

由于这是一个警告,我可能会忽略它,但我想明白发生了什么。

Answer 1:

的Latin1的字符HTML编码(如直径,这是什么字描述)是什么打破了XML解析器。 如果您在数据的控制的时候,你需要使用XML风格的字符编码逃避它(直径恰好是&#216;)



Answer 2:

HTML实体喜欢&Oslash是不一样的XML实体。 这里有一个表替换HTML实体,以XML的实体。

正如我可以从你的评论人告诉另一职务,你有与实体/麻烦。 我不知道这甚至是一个有效的HTML实体,我的Firefox将不显示字符 - 仅在OUPUTS实体名称。 但我发现的其它表的大多数实体和他们的性格参考号码。 试着将它们添加到您的替换表,你应该是安全的。 /人的参考号是/通过的方式。



Answer 3:

我认为这是一个编码的问题。 PHP,SimpleXML的在这种特殊情况下,不喜欢你有在fornames标签丹麦O操作。 你可以尝试在编码UTF-8和去除通过该标签的转义版本的整个文件。 Aferwards你可以阅读完全转义字符免费文件到simplexml的。

ķ



Answer 4:

只是有一个非常类似的问题,解决它以下列方式。 其主要思想是将文件加载到一个字符串,替换上像所有的坏实体“[实体] Oslash;” 和显示一些XML节点之前进行逆替换。

function readXML($filename){
    $xml_string = implode("", file($filename));
    $xml_string = str_replace("&", "[[entity]]", $xml_string);
    return simplexml_load_string($xml_string);
}
function xml2str($xml){
    $str = str_replace("[[entity]]", "&", (string)$xml);
    $str = iconv("UTF-8", "WINDOWS-1251", $str);
    return $str;
}
$xml = readXML($filename);
echo xml2str($xml->forenames);

的iconv( “UTF-8”, “WINDOWS-1251”,$ STR),因为我有我的网页上的 “Windows-1251” 编码



Answer 5:

尝试使用这一行:

<forenames><![CDATA[B&Oslash;IE]]></forenames><x> </x>

和阅读这个关于CDATA



文章来源: Problem with simpleXML and entity not being defined