我使用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中,它似乎在()
中出错。那么我应该注意多少个符号?
答案 0 :(得分:4)
是一个HTML实体,但在XML中不存在。
要么摆脱它(你不是说它来自何处,所以很难提供任何更具体的建议),或者将你的HTML数据包装在CDATA
块中,以便解析器忽略它们。
答案 1 :(得分:3)
HTML特定实体 - 在本例中为
- 不是有效的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('<','>','&',''','"'),$str);
save_to_xml($str);
请注意,如果您在字符串中使用htmlentities()然后将其保存在xml中,那么这就是问题的根源(因为您将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),西班牙语()中的有效单词并不意味着它在英语中也是有效的,无论是两种语言之间的相似之处。
答案 2 :(得分:1)
 
;是不间断的空间。你必须更换它。 http://en.wikipedia.org/wiki/Non-breaking_space