我在下面继续收到以下验证警告。我想知道我的一些文章涉及特殊字符,并想知道我应该如何渲染或不在我的RSS提要中渲染特殊字符?我应该使用htmlentites吗?如果是这样的话?
此外,与...的互操作性 最广泛的饲料阅读器可能 通过实施以下改进 建议。第22行,第35栏: 标题不应包含HTML:
&
PHP代码。
<title>' . htmlentities(strip_tags($title), ENT_QUOTES, "UTF-8") . '</title>
答案 0 :(得分:1)
您应该使用CDATA转义XML Feed中的字符,这样您就可以在不中断XML布局的情况下使用原始数据。
试试这个:
<title><![CDATA[ YOUR RAW CONTENT]]></title>
注意:不要使用htmlentites和strip_tags,因为这会为浏览器转义它们,任何其他读者都应该正确读取它们。
来自w3schools的Qoute:
术语CDATA用于不应由XML解析器解析的文本数据。 像
"<"
和"&"
这样的字符在XML元素中是非法的。"<"
将生成错误,因为解析器将其解释为新元素的开头。"&"
将生成错误,因为解析器将其解释为字符实体的开头。 某些文本(如JavaScript代码)包含大量"<"
或"&"
个字符。为避免错误,脚本代码可以定义为CDATA。 解析器会忽略CDATA部分内的所有内容。 CDATA部分以“”开头:
答案 1 :(得分:1)
/ * feedvalidator.org(Feedburner建议此站点验证您的Feed)说:“对于最广泛的互操作,RSS配置文件建议使用十六进制字符参考”&amp;“来表示”&amp;“和”&lt; ;“代表”&lt;“。* /
// find title problems
$find[] = '<';
$find[] = '\x92';
$find[] = '\x84';
// find content problems
$find_c[] = '\x92';
$find_c[] = '\x84';
$find_c[] = ' ';
// replace title
$replace[] = '<';
$replace[] = ''';
$replace[] = '"';
// replace content
$replace_c[] = ''';
$replace_c[] = '"';
$replace_c[] = ' ';
// We don't want to re-replace "&" characters.
// So do this first because of PHP "feature" https://bugs.php.net/bug.php?id=33773
$title = str_replace('&', '&', $title);
$title = str_replace($find, $replace, $title);
$post_content = str_replace($find_c, $replace_c, $row[3]);
// http://productforums.google.com/forum/#!topic/merchant-center/nIVyFrJsjpk
$link = str_replace('&', '&', $link);
当然我在$ title,$ post_content和$ link添加到我的数据库之前做了一些预处理。但这应该有助于解决一些常见问题,以获得有效的RSS提要。
更新:修正了&amp;#x26;#x26;#x26; “递归”问题,请参阅https://bugs.php.net/bug.php?id=33773
答案 2 :(得分:0)
取出htmlentities()
。它仅适用于HTML文件。