我正在从网址构建一个feed,所以我将所有的html内容(带有“file_get_contents”php函数)。然后我对内容进行一些削减并取出我需要的东西。
似乎我对重音的声音有问题。实际上XML页面会返回此错误: “实体'igrave'未定义”,其中html是“ 一世 “(”ì“的html代码)。 同样适用于ograve ...
那么,我是否可以使用str_replace继续所有内容,或者有一个编码/解码函数来解决所有可能出现的问题?
答案 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><ähhh/gt;</b>'));
输出:
string(20) "<b><ähhh/gt;</b>"