我更新了我的网络应用程序,使用的是UTF-8而不是ANSI。
我做了以下措施来定义字符集:
mysql_set_charset("utf8"); // PHP
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> // HTML
utf8_general_ci // In MySQL
我还编辑了CKEditor配置来删除htmlentities,因为我需要正确的字符(即é
而不是é
)来进行MySQL全文搜索。
config.entities = false;
config.entities_latin = false;
在数据库(phpMyAdmin视图)和普通文本字段输出(HTML,<input>
或<textarea>
)中,一切看起来都很好(我看到é
,而不是é
,而不是é
,yay)。
但是,CKEditor在编码方面有些麻烦。请参阅附图,了解从数据库中获取的相同字段,显示在textarea中,然后在CKEditor重新定位的textarea中:
这似乎是在CKEditor JavaScript代码中(可能是一个固定的字符集),但我在配置中找不到它。同样,由于é
在普通HTML(真正的UTF-8 é
,而不是é
或é
)中正确显示,我很确定它不是PHP / MySQL查询错了(但我可能会弄错)。
编辑:这似乎是应用htmlentities
的症状,默认情况下,在UTF-8文本中使用Latin-1编码。有可能使用htmlspecialchars
或指定字符集(“utf-8”),但我不知道在CKEditor中修改它的位置。
答案 0 :(得分:8)
这个帖子似乎有点陈旧,但回答它是为了帮助任何寻找回复的人。
允许CKEditor
将字符é
处理为é
而不是é
;将entities_latin
的配置设置为false
,如下所示:
config.entities_latin = false;
或者,您可能只想将以下选项设置为false:
config.entities = false;
config.basicEntities = false;
答案 1 :(得分:0)
这是我的方法错了,而不是CKEditor的。查看了错误的文件并错过了htmlspecialchars
上的UTF-8编码。
答案 2 :(得分:-1)
您还可以在数据库连接中使用:$connection->query("SET NAMES 'utf8'");
并记得将db和/或表Collation设置为utf8 ...我更喜欢utf8_general_ci