2012-08-02 78 views
3

我一直在努力工作幾個小時,試圖獲得一個rss提要。問題在於特殊字符。我有數據列在網站上的列表,但我也想要一個RSS飼料。標題有「&」,寫成$ amp ;.如果我使用htmlspecialchars它將它轉換爲$ amp; amp;如果我不驗證者因「&」而給出錯誤。我不能寫「&」,否則html將無法正確顯示。我試圖讓它獨自放在一個Cdata標籤中,但這也不起作用。RSS提要和特殊字符

這裏是飼料:http://montanafarmersunion.com/rss.php

下面是同一列表的HTML:http://montanafarmersunion.com/?hd=news&id=news

+0

向我們顯示您的代碼。沒有看到你嘗試過的東西,我們不禁感慨。 – 2012-08-02 17:55:58

+0

這裏是提問'<![CDATA ['.trim(htmlspecialchars($ art [1],ENT_NOQUOTES,'UTF-8'))''。 ]]>'藝術[1]是一個陣列,文字是這樣的'8月1日:MFU農業法案主席' – Elliott 2012-08-02 19:04:41

回答

2

RSS Advisory Board page總結了問題相當漂亮:

該規範一直缺乏關於是否清晰在項目說明以外的元素中允許HTML爲 ,導致聚合器在其他方式中處理字符數據的方式差異很大 元素。這使得發佈者 確定如何編碼字符「&」和「<」(其必須是以XML編碼的 )特別困難。

也就是說,沒有「正確」的方式。理論上,你應該能夠避免使用CDATA標籤,然後HTML編碼你的標題。例如,這對我的作品在Firefox & IE8:

$title = 'August 1st: MFU President &amp; friends on farm bill'; 
echo '<title>'.trim($title).'</title>'; 

然而W3 RSS validator(這是你使用的是什麼?)反對建議,因爲&amp;,根據上面鏈接的頁面上。他們建議使用十六進制字符引用,但僅限於&<。實現這個最簡單的方法可能是一個簡單的str_replace

$title = 'August 1st: MFU President & friends on farm bill'; 
$title = str_replace(array('&', '<'), array('&#x26;', '&#x3C;'), $title); 
echo '<title>'.trim($title).'</title>'; 

(請注意我做的出發串裸&

我覺得有必要提this blog post爲好,這表明有ISN這並不是一種讓所有讀者始終都快樂的方式。但最後的方法應該得到他們中的大部分。