我在SegmentFault的rss訂閱支援裡使用了atom標準,我仔細閱讀過這一標準,而且以前也開發過很多atom訂閱的程式,所以看起來似乎沒什麼困難,而且開發出來在閱讀器(google reader, etc.)裡面也表現良好。但是當我使用w3c的feed驗證時它給我報了這樣一個錯誤(驗證地址: http://validator.w3.org/feed/check.cg...)
這是一個很令人困惑的錯誤,因為通常not well-formed錯誤可能會發生在一些特殊字元沒有escape的時候,但是我已經在輸出之前對內容做了以下處理
function escape($string) { return str_replace(array('&','"',"'",'<','>'), array('&','"',''','<','>'), $string);}
所以輸出的內容是不會有特殊字元的問題。我嘗試把內容放在裡面括起來,但是都無效。
更令人奇怪的是,似乎這個錯誤只是出現在這篇文章中(也就是只針對特定的字元),在不包涵這篇文章的feed中驗證就會通過,比如: http://validator.w3.org/feed/check.cg...。
我自己懷疑是atom標準對UTF-8的編碼支援有問題,或者我還有什麼地方沒有設定好,不知道有沒有好的解決辦法。
回複內容:
我在SegmentFault的rss訂閱支援裡使用了atom標準,我仔細閱讀過這一標準,而且以前也開發過很多atom訂閱的程式,所以看起來似乎沒什麼困難,而且開發出來在閱讀器(google reader, etc.)裡面也表現良好。但是當我使用w3c的feed驗證時它給我報了這樣一個錯誤(驗證地址: http://validator.w3.org/feed/check.cg...)
這是一個很令人困惑的錯誤,因為通常not well-formed錯誤可能會發生在一些特殊字元沒有escape的時候,但是我已經在輸出之前對內容做了以下處理
function escape($string) { return str_replace(array('&','"',"'",'<','>'), array('&','"',''','<','>'), $string);}
所以輸出的內容是不會有特殊字元的問題。我嘗試把內容放在裡面括起來,但是都無效。
更令人奇怪的是,似乎這個錯誤只是出現在這篇文章中(也就是只針對特定的字元),在不包涵這篇文章的feed中驗證就會通過,比如: http://validator.w3.org/feed/check.cg...。
我自己懷疑是atom標準對UTF-8的編碼支援有問題,或者我還有什麼地方沒有設定好,不知道有沒有好的解決辦法。
你的代碼沒有問題,我仔細看了下你出現問題的那篇文章,開始沒有絲毫頭緒,後來乾脆把它copy到vim裡來看,然後我發現了這個
看到沒有,在"一種"和"如芒在背"之間有一個不可見字元,這種字元會引起第三方驗證程式的編碼錯誤,但是基本上不會影響閱讀器的使用。去掉這個字元應該就沒有問題了。這種字元一般都是切換IME時出來的。