檢查我的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裡面可以顯示圖片了。