将特殊字符保存到DB然后使用PHP显示

时间:2010-09-23 09:52:46

标签: php mysql

我有一个缓存大量RSS源的脚本,但是我注意到我开始在输出缓存内容的页面中出现奇怪的字符(存储在DB中)。

例如,RSS源包含字符:Introducing…: ...

应该阅读:Introducing...: ...

但是我的页面显示为:Introducing…: ...

似乎这些陌生人的字符实际上是存储在数据库中的。

有人可以提出我可能出错的地方吗?

我是否需要在进入数据库的途中对解码进行编码?

3 个答案:

答案 0 :(得分:1)

您需要确保RSS源的编码与数据库中的编码相同。否则,您首先需要转换内容。

Feed的编码应该在XML标题中:

<?xml version="1.0" encoding="UTF-8"?>

您可以使用此功能将其转换为您在数据库中使用的编码(最好是UTF-8):

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

答案 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'); ?>