php 如何排除“simplexml_load_file()解析器错误:实体'nbsp'未定义”?

lhcgjxsq  于 2023-03-07  发布在  PHP
关注(0)|答案(4)|浏览(136)

我使用PHP来生成XML文件。我使用了下面的一些代码来避免错误。

$str = str_ireplace(array('<','>','&','\'','"'),array('&lt;','&gt;','&amp;','&apos;','&quot;'),$str);

但仍会导致故障。

simplexml_load_file() [function.simplexml-load-file] *[file name]* parser error : Entity 'nbsp' not defined in *[file name] [line]*

错误文本如下:

Dallas&nbsp;&nbsp;Dallas () is the third-largest city in Texas and the ninth-largest in the United States.

在IE8中,它似乎在()中出错,那么我应该注意到多少符号呢?

62o28rlo

62o28rlo1#

HTML特定的实体--在本例中是&nbsp;--不是有效的XML实体,这就是simplexml所抱怨的;它读取xml格式的文件(不是html),并查找无效的实体。您需要先将HTML实体转换回它们的字符表示(您可以使用html_entity_decode()来完成此操作)

$str = "some string containing html";
// this line will convert back html entities to regular characters
$str = html_entity_decode($str, ...);
// now convert special character to their xml entities
$str = str_ireplace(array('<','>','&','\'','"'),array('&lt;','&gt;','&amp;','&apos;','&quot;'),$str);

save_to_xml($str);

请注意,如果在将字符串保存到XML中之前对它使用了htmlentities(),那么这就是问题的根源(因为您要将HTML字符转换为它们各自的HTML实体,而SimpleXML无法将其识别为XML实体)。

// this won't work, the html entities it will uses are not valid xml entities
$str = htmlentities($str, ...)

save_to_xml($str);

如果你在理解上有困难,可以把它看作两种不同的语言,比如西班牙语(html)和英语(xml),一个在西班牙语()中有效的单词并不意味着它在英语中也有效,不管这两种语言之间有什么相似之处。

nfg76nw0

nfg76nw02#

&nbsp;是一个HTML实体,但不存在于XML中。
要么去掉它(您没有说明它来自哪里,所以很难给予任何更具体的建议),要么将HTML数据 Package 在CDATA块中,这样解析器就会忽略它们。

5rgfhyps

5rgfhyps4#

您还可以使用htmlentities($str, ENT_XML1 | ENT_QUOTES)htmlentities),它只使用XML实体,而不使用HTML(如&nbsp&ndash&laquo&raquo等)。

相关问题