如何编码“;实体';igrave';未定义”;XML提要中出现错误


How to encode for "Entity 'igrave' not defined" error in XML feed?

我正在从一个url构建一个提要,所以我接受所有的html内容(使用"file_get_contents"php函数)。然后我对内容进行一些剪辑,并取出我需要的内容。

我似乎对口音有意见。事实上,XML页面返回了以下错误:"未定义实体'igrave'",其中html为&迁移;("ì"的html代码)。ograve也是如此。。。

那么,我是要用str_replace处理所有内容,还是有一个编码/解码功能来解决所有可能的问题?

Xml不知道(X)HTML中的命名实体。如果出现此错误,则提要无效,应予以修复。

作为一种变通方法,您可以从PHP获取翻译表,并将其与str_replace()一起使用。

function decodeNamedEntities($string) {
  static $entities = NULL;
  if (NULL === $entities) {
    $entities = array_flip(
      array_diff(
        get_html_translation_table(HTML_ENTITIES, ENT_COMPAT | ENT_HTML401, 'UTF-8'),
        get_html_translation_table(HTML_ENTITIES, ENT_COMPAT | ENT_XML1, 'UTF-8')
      )
    );
  }
  return str_replace(array_keys($entities), $entities, $string);
}
var_dump(decodeNamedEntities('<b>&lt;&auml;hhh/gt;</b>'));

输出:

string(20) "<b>&lt;ähhh/gt;</b>"