檢查我的RSS出了什麼毛病

最近發現無糧殿的RSS無法顯示圖片。 還在思考是不是我動了Fluent Reader的什麼功能。

在Spike的博客摸到了 Feed Validation Service這個網站。 可以把訂閱源網址粘進去,或者把整個訂閱源的XML檔案內容複製進去,讓它檢查這個訂閱源是不是有效。 如果有效,會看到「This is a valid Atom 1.0 feed.」或者「This is a valid RSS feed.」等類似的提示。

我的RSS Feed是有效的。

但是因爲<description><![CDATA[{{ .Content }}]]></description>直接輸出了文章內文, 而內文中的圖片和連結使用的是相對路徑(例如“/posts/../cat.jpg”), RSS閱讀器無法直接解析相對路徑,所以看不到圖片。

在XML檔裡加了條規則,替換了href和src中以斜線開頭的相對路徑,改成絕對路徑。

希望現在圖片能在RSS閲讀器中正常顯示了!

放一張今年春天的盆景來測試一下:

蘿蔔放在魚缸裡,假裝成盆景
如閣下所見,是蘿蔔在魚缸裡
攝於2025年3月


8月28日更新:

失敗了,圖片還是崩壞! 忘記了自己有給圖片做webp/avif優化,srcset中也有相對路徑啊啊啊

得把XML檔里srcset的路徑也替換成絕對路徑。

srcset有用逗號分隔的路徑和寬度標記(例如srcset="/img/small.jpg 500w, /img/large.jpg 1000w"),比src複雜,所以分兩步處理:

{{- /* 取得站點根網址 */ -}}
{{- $baseURL := site.BaseURL | string | strings.TrimRight "/" }}

{{- /* 替換href與src的相對路徑 */ -}}
{{- $content = $content | replaceRE "(href|src)=\"(/[^\"#][^\"]*)\"" (printf "$1=\"%s$2\"" $baseURL) }}

{{- /* 替換srcset的相對路徑 */ -}}
{{- /* 1. 替換srcset的第一個路徑 */ -}}
{{- $content = $content | replaceRE "srcset=\"(/[^\"\n]+)\"" (printf "srcset=\"%s$1\"" $baseURL) }}
{{- /* 2. 替換srcset中逗號後面的後續路徑 */ -}}
{{- $content = $content | replaceRE ",\\s*(/[^\"\n\\s]+)" (printf ", %s$1" $baseURL) }}

{{- /* 輸出! */ -}}
<description><![CDATA[{{ $content | safeHTML }}]]></description>

成功了!現在RSS裡面可以顯示圖片了。

?隨機抽選一篇