如何编码XML Feed中的“实体'igrave'未定义”错误?

时间:2013-12-05 17:24:17

标签: php xml entity

我正在从网址构建一个feed,所以我将所有的html内容(带有“file_get_contents”php函数)。然后我对内容进行一些削减并取出我需要的东西。

似乎我对重音的声音有问题。实际上XML页面会返回此错误: “实体'igrave'未定义”,其中html是“     一世 “(”ì“的html代码)。 同样适用于ograve ...

那么,我是否可以使用str_replace继续所有内容,或者有一个编码/解码函数来解决所有可能出现的问题?

1 个答案:

答案 0 :(得分:0)

Xml不知道(X)HTML中的命名实体。如果您收到此错误,则Feed无效且应修复。

作为一种变通方法,您可以从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>"