我有一个缓存大量RSS源的脚本,但是我注意到我开始在输出缓存内容的页面中出现奇怪的字符(存储在DB中)。
例如,RSS源包含字符:Introducing…: ...
应该阅读:Introducing...: ...
但是我的页面显示为:Introducing…: ...
似乎这些陌生人的字符实际上是存储在数据库中的。
有人可以提出我可能出错的地方吗?
我是否需要在进入数据库的途中对解码进行编码?
答案 0 :(得分:1)
您需要确保RSS源的编码与数据库中的编码相同。否则,您首先需要转换内容。
Feed的编码应该在XML标题中:
<?xml version="1.0" encoding="UTF-8"?>
您可以使用此功能将其转换为您在数据库中使用的编码(最好是UTF-8):
答案 1 :(得分:0)
输出中有3个坏字符这一事实表明正在解释RSS提要,以便将HTML字符引用转换为UTF-8。
尝试将以下内容添加到<head>
部分的输出HTML中,将显示页面的文本编码设置为UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
或者,由于这是PHP,您可以直接设置HTTP标头:
<?php
header("Content-Type: text/html; charset=UTF-8");
?>
但是,更好的解决方案可能是避免首先转换实体。您是否在检索RSS源的代码中调用了html_entity_decode()
?如果是这样,那么删除它可能是明智的。
答案 2 :(得分:0)
当您使用UTF-8时,请确保将数据库连接设置为utf-8 .. f.e.在mysql中
SET NAMES 'utf-8';
然后设置正确的输出内容类型,如Anthony Williams所述。您最多可以同时执行以下操作:设置META Content-Type并发送Content-Type HTTP-Header。
由于您的应用程序似乎在将它们写入数据库之前解码了缓存的RSS提要的重要性,您也可以输出它们,就像您首先获得它们一样
<?php echo htmlentities($string, ENT_QUOTES, 'UTF-8'); ?>