将特殊字符保存到数据库,然后使用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):

http://php.net/manual/function.mb-convert-encoding.php

当您使用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'); ?> 
得到了他们