PHP& RSS Feed&特殊字符验证问题

时间:2011-01-15 23:41:39

标签: php rss

我在下面继续收到以下验证警告。我想知道我的一些文章涉及特殊字符,并想知道我应该如何渲染或不在我的RSS提要中渲染特殊字符?我应该使用htmlentites吗?如果是这样的话?

  

此外,与...的互操作性   最广泛的饲料阅读器可能   通过实施以下改进   建议。第22行,第35栏:   标题不应包含HTML:&

PHP代码。

<title>' . htmlentities(strip_tags($title), ENT_QUOTES, "UTF-8") . '</title>

3 个答案:

答案 0 :(得分:1)

您应该使用CDATA转义XML Feed中的字符,这样您就可以在不中断XML布局的情况下使用原始数据。

试试这个:

<title><![CDATA[ YOUR RAW CONTENT]]></title>

注意:不要使用htmlentites和strip_tags,因为这会为浏览器转义它们,任何其他读者都应该正确读取它们。

来自w3schools的Qoute:

  

术语CDATA用于不应由XML解析器解析的文本数据。   像"<""&"这样的字符在XML元素中是非法的。   "<"将生成错误,因为解析器将其解释为新元素的开头。   "&"将生成错误,因为解析器将其解释为字符实体的开头。   某些文本(如JavaScript代码)包含大量"<""&"个字符。为避免错误,脚本代码可以定义为CDATA。   解析器会忽略CDATA部分内的所有内容。   CDATA部分以“”开头:

http://www.w3schools.com/xml/xml_cdata.asp

答案 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[] = '&nbsp;';

        // replace title
        $replace[] = '&#x3C;';
        $replace[] = '&#39;';
        $replace[] = '&#34;';

        // replace content
        $replace_c[] = '&#39;';
        $replace_c[] = '&#34;';
        $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('&', '&#x26;', $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('&', '&amp;', $link);

当然我在$ title,$ post_content和$ link添加到我的数据库之前做了一些预处理。但这应该有助于解决一些常见问题,以获得有效的RSS提要。

更新:修正了&amp;#x26;#x26;#x26; “递归”问题,请参阅https://bugs.php.net/bug.php?id=33773

答案 2 :(得分:0)

取出htmlentities()。它仅适用于HTML文件。