header('Content-Type: application/rss+xml; charset=UTF-8');

订阅器里文章标题显示成一串西欧字母,正文反而正常,浏览器直接打开 feed 也是同样的情况。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,响应头里的 Content-Type 只有 rss+xml,没有带 charset,阅读器按 Latin-1 解码。XML 声明里虽然写了 UTF-8,部分阅读器不看这一行。服务器默认字符集被改过也会这样。

「feed 标题乱码」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

处理上按这个顺序:在 feed 输出前用 header 补上 charset=utf-8;确认 XML 声明也是 UTF-8,两处保持一致;服务器层面别加默认字符集配置,它会覆盖程序设置的头。

改完只确认一件事:阅读器里标题和正文都显示正常中文,浏览器打开也是。

作者 9823189