这是处理我的CMS和前端中的特殊字符的正确方法吗?

时间:2013-06-25 15:12:37

标签: php mysql encoding character-encoding escaping

我已经在我的CMS中与特殊角色斗争多年,我仍然遇到一些问题。我有一个非常简单的CMS,它有textareas,允许你删除部分HTML /内容,然后保存到我的数据库。

从MS Word复制并粘贴到CMS时遇到问题(详见下文)。例如,一个卷曲的撇号:'

我知道我打算使用UTF-8。我只是想确认我正在使用正确的方法。

我的CMS <HEAD>包含以下内容:

<meta http-equiv="content-type" content="text/html; charset=utf-8">

愚蠢的我的前端网页<HEAD>有:

<meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />

我刚刚在config.php文件中注意到(作为CMS中的第一个包含),我有以下内容:

header("Content-Type: text/html; charset=iso-8859-1");

当我从textarea将数据保存到数据库时,我只需执行以下操作保存:

mysql_real_escape_string($textarea)

当我将数据加载回textarea时,我按以下方式执行:

htmlspecialchars($this->cmsDb->html_body)

现在(使用混乱的字符集混合),如果我从MS Word粘贴并单击保存,数据将进入我的数据库 - 但它无法加载回textarea,因为htmlspecialchars()返回一个空字符串。我理解为什么 - 它无法加载无法识别的字符。

所以真正的问题是:

1)如果我将iso-8859-1引用更改为UTF-8 - 是否一切正常?或者我错过了其他什么?

2)我是否需要对任何数据库/表编码非常具体?

3)特殊字符是否应保留在我的数据库中以及加载回文本区域时作为特殊字符?或者它们都应该是ASCII码格式吗?

非常感谢能帮助我解决这个问题的人。

UPDATE!!!

我没有将header()和前端网页的字符集更改为utf-8。

我现在可以保存卷曲的引号,卷曲的叛逆者,符号和破折号,一切都很好。它们正确加载回CMS,并在前端网页上正确格式化。

然而,当我查看数据库中的数据时。他们都像以前一样陷入困境:

<p>“I'm in double quotes man!â€</p>

这是预料之中 - 还是它们在DB中看起来还不错?如果是这样我哪里错了?

2 个答案:

答案 0 :(得分:1)

1)是

2)是的

3)尝试将数据库中的字符“htmlencoding”到textarea,它们将正确呈现。

答案 1 :(得分:0)

对所有三个问题都是肯定的。

另请注意,从textarea将数据保存到数据库时,必须使用预准备语句