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


Is this the right way to deal with special characters in my CMS and front end?

多年来,我一直在与CMS中的特殊字符作斗争,但仍有一些问题。我有一个非常简单的CMS,它有文本区域,允许您将部分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");

当我从文本区域将数据保存到DB时,我只需执行以下操作即可保存:

mysql_real_escape_string($textarea)

当我将数据加载回文本区域时,我通过以下操作:

htmlspecialchars($this->cmsDb->html_body)

现在(混乱的字符集混合),如果我从MS Word粘贴并单击保存,数据就会进入我的数据库,但它无法加载回文本区域,因为htmlspecialchar()返回一个空白字符串。我理解为什么——它无法加载未识别的字符。

所以真正的问题是:

1) 如果我将iso-8859-1引用更改为UTF-8,那么接下来一切都会好起来吗?还是我错过了什么?

2) 我需要非常具体地使用任何数据库/表编码吗?

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

非常感谢任何能帮助我度过难关的人。

UPDATE!!!

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

我现在可以保存大引号、大撇号、英镑符号和短划线,一切都很好。它们正确地加载回CMS,并且在前端网页上正确地格式化。

但是,当我查看数据库中的数据时。他们都一团糟,就像:

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

这是意料之中的事吗?还是他们在DB中看起来也不错?如果是这样,我哪里错了?

1)是

2) 是

3) 尝试将数据库中的字符"htmlencoding"到文本区域,它们将正确呈现。

三个问题都是。

还要注意,当从文本区域将数据保存到DB时,必须使用准备好的语句