HTML实体的PHP XMLReader问题
作者:互联网
我正在使用此处描述的方法(How to use XMLReader in PHP?)处理外部xml文档,但遇到此错误:
…parser error : Entity ‘Atilde’ not defined in…
和类似的,例如
cent, acirc, not
错误发生在$z-> expand()函数上.如果我将其注释掉,它会在$z-> next()函数上发生.
我知道问题字段,并尝试在扩展之前使用base64_encode对其进行编辑,但它是只读的.
编辑:问题字符串是:
...ââ¬Â...
结束编辑
感谢您提供的任何帮助.
解决方法:
XML does only know the entities lt, gt, amp, apos, and quot.所以任何其他entity reference都会引发错误. (请注意,character references和实体引用不相同.)
您可以使用strtr
转换XML中也未知的任何HTML实体引用:
$trans = array_map('utf8_encode', array_flip(array_diff(get_html_translation_table(HTML_ENTITIES), get_html_translation_table(HTML_SPECIALCHARS))));
$output = strtr($input, $trans);
get_html_translation_table
返回一个数组,用于将字符映射到实体引用. get_html_translation_table(HTML_ENTITIES)返回所有实体的映射,而get_html_translation_table(HTML_SPECIALCHARS)仅返回上述实体. array_diff
会有所不同,因此所有没有上述实体的实体. array_flip反转键/值关联,将array_map
与utf8_encode
一起应用会将值从ISO 8859-1转换为UTF-8.
标签:xmlreader,html-entities,php 来源: https://codeday.me/bug/20191208/2088019.html