编程语言
首页 > 编程语言> > HTML实体的PHP XMLReader问题

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_maputf8_encode一起应用会将值从ISO 8859-1转换为UTF-8.

标签:xmlreader,html-entities,php
来源: https://codeday.me/bug/20191208/2088019.html