将特殊字符保存到数据库,然后使用PHP显示
问题描述:
我有一个缓存大量RSS源的脚本,但是我注意到我已经开始在输出缓存内容的页面出现奇怪的字符(存储在数据库中)。将特殊字符保存到数据库,然后使用PHP显示
例如RSS提要包含字符:Introducing…: ...
哪些应该阅读:Introducing...: ...
但是我的网页显示为:Introducing…: ...
看来,这些陌生人字符实际上是被存储在数据库就像这样。
任何人都可以提出我可能会出错的地方吗?
我需要编码的方式进入数据库的解码出路吗?
答
输出中有3个错误字符的事实表明正在解释RSS提要,以便将HTML字符引用转换为UTF-8。
尝试通过将以下到输出HTML中<head>
节设置你的显示页面的文本编码成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 feed的代码中调用html_entity_decode()
?如果是这样,那么删除它可能是明智的。
答
您需要确保RSS源的编码与您的数据库中的编码相同。否则,您首先需要转换内容。
饲料的编码应在XML头:
<?xml version="1.0" encoding="UTF-8"?>
您可以使用此功能将其转换为你的数据库所使用的编码(最好是UTF-8):
答
当您使用UTF-8时,请确保您将数据库连接设置为utf-8 .. fe在mysql中
SET NAMES 'utf-8';
然后按照Anthony Williams的描述设置正确的输出内容类型。充其量,你最好做两件事情:设置META Content-Type并发送Content-Type HTTP-Header。
由于您的应用程序似乎将其写入到数据库之前所缓存的RSS提要的解码ヶ辆,还可以输出他们像你摆在首位
<?php echo htmlentities($string, ENT_QUOTES, 'UTF-8'); ?>
得到了他们