我已经读过这个问题并且之前遇到过,但我还没有找到解决方案。我有一个新闻聚合器,从RSS提要中提取新闻。显示内容后,我得到了黑钻石问号,所以在做了一些研究后,我添加了以下代码行(PHP):
$content = mb_convert_encoding($content, 'UTF-8', 'HTML-ENTITIES');
这很成功地解决了这个问题,但是看了另一篇带有重音符号的西班牙语单词的文章,我注意到重音已被转换为时髦的角色。他们之前看起来很好。例如,现在我看到类似的东西:
GENA©ticas
现在我宁愿有第二个问题,因为它没有那么多,但理想情况下我想解决这两个问题。我的MySQL表是UTF-8,以及页面的doctype。任何想法??
答案 0 :(得分:3)
您正在从多个Feed中提取数据,因此您无法依赖所有使用相同字符编码的Feed。
XML feed应该宣告它们在XML前导码中的字符集,并且服务器应该发送标题,说明文件正在使用的字符编码,但它们并非必然存在,如果它们是,它们不确定准确。
您可以使用mb_detect_encoding来尝试找出您正在解析的文件使用的编码,但同样,这并非100%确定准确。
因此,如果你的目标是将你正在处理的所有提要标准化为同一个字符集(我猜UTF 8),你的选择是查看XML前导码,标题(如果已经发送了适当的标题)和mb_detect_encoding的结果来确定编码。如果以上所有内容都同意你(但不一定)很清楚文件的编码方式以及转换它需要做什么。如果这些方法之间存在分歧,那么您必须自己决定采取什么行动。
总之,欢迎来到charset地狱。你喜欢吗?