我使用PHP来生成XML文件。我使用了下面的一些代码来避免错误。
$str = str_ireplace(array('<','>','&','\'','"'),array('<','>','&',''','"'),$str);
但仍会导致故障。
simplexml_load_file() [function.simplexml-load-file] *[file name]* parser error : Entity 'nbsp' not defined in *[file name] [line]*
错误文本如下:
Dallas Dallas () is the third-largest city in Texas and the ninth-largest in the United States.
在IE8中,它似乎在()
中出错,那么我应该注意到多少符号呢?
4条答案
按热度按时间62o28rlo1#
HTML特定的实体--在本例中是
--不是有效的XML实体,这就是simplexml所抱怨的;它读取xml格式的文件(不是html),并查找无效的实体。您需要先将HTML实体转换回它们的字符表示(您可以使用html_entity_decode()来完成此操作)请注意,如果在将字符串保存到XML中之前对它使用了htmlentities(),那么这就是问题的根源(因为您要将HTML字符转换为它们各自的HTML实体,而SimpleXML无法将其识别为XML实体)。
如果你在理解上有困难,可以把它看作两种不同的语言,比如西班牙语(html)和英语(xml),一个在西班牙语()中有效的单词并不意味着它在英语中也有效,不管这两种语言之间有什么相似之处。
nfg76nw02#
是一个HTML实体,但不存在于XML中。要么去掉它(您没有说明它来自哪里,所以很难给予任何更具体的建议),要么将HTML数据 Package 在
CDATA
块中,这样解析器就会忽略它们。hs1rzwqc3#
 
;是不间断空格。您必须替换它。http://en.wikipedia.org/wiki/Non-breaking_space5rgfhyps4#
您还可以使用
htmlentities($str, ENT_XML1 | ENT_QUOTES)
(htmlentities),它只使用XML实体,而不使用HTML(如 
、&ndash
、«
、»
等)。