我需要在PHP中创建一个应用程序,可以处理所有地方的所有Unicode字符 - 编辑字段,静态HTML,数据库。有人可以告诉我需要设置/使用的所有参数/功能的完整列表以实现此目标吗?如何正确处理国际字符在PHP/MySQL/Apache
回答
阿帕奇
服务器编码必须是未设置,或设置为UTF-8。这是通过apache的AddDefaultCharset指令完成的。这可以转到虚拟主机或一般文件(请参阅文档)。
AddDefaultCharset utf-8
的MySQL
- 设置数据库的排序规则是UTF-8
- 设置连接编码。它可以作为一个具有mysqli_set_charset说来完成,或通过发送该连接后只是:
SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'
PHP
1-你应该设置页面的HTML字符集为UTF-8通过页面上的meta标签,或通过PHP头:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -or- header('Content-type: text/html; charset=utf-8');
2 - 你应该总是使用MB *的字符串相关的功能的版本,例如,mbstrlen而不是strlen的获得STR字符串的长度。
这应该允许你从页面到数据到处都有UTF-8。您可以执行以下测试:使用Firefox在页面上的任意位置单击鼠标右键,然后选择显示页面信息。有效编码在该页面中列出。
重要提示:您还应该确保在连接到Mysql时使用UTF-8作为连接字符集!
对于mysqli的,这是由
mysqli_set_charset($dblink, 'utf-8')
有些事情做,你需要考虑: -
PHP
确保您的内容标记为utf-8:
default_charset = "utf-8"
安装mbstring。你可以找到它here
确保你在说PHP和MySQL之间的utf-8。
呼叫mysql_set_charset("utf8");
(或使用SQL查询SET NAMES utf8
)
阿帕奇
还与一些设置你的页面的Content-Type:
在这里这样
AddDefaultCharset utf-8
MySQL的
确保所有表使用utf8整理utf8_general_ci;例如
ALTER DATABASE mydb CHARACTER SET utf8;
最后
最后,测试的东西乐趣unicode的样品,like these ones
9(͡๏̯͡๏)6
更多有用的信息when I tried this ...
建议您使用HTTP标头或元素元素来设置c utf-8将网页中的harset放在网页上。 W3C建议您同时执行这两个操作。 meta元素应该尽可能早地出现在页面上。 (meta元素之前的所有字符都应该是ASCII,这在几乎所有的字符编码中都是基本相同的,有些浏览器在遇到元标记时会重新启动页面渲染,这也是提早使用meta元素的另一个好理由。)
,在所有接受用户输入的表单上输入accept-charset="utf-8"
属性。通常,提交POST数据的浏览器将默认使用页面的编码,但确保无损。
我用上述方法,他们工作得很好。直到最近,当我的提供者更新PHP到5.2.11和MySQL到5.0.81社区。在此更改之后,unicode字符已从数据库中正确检索,但所有更新都已损坏,unicode字符正被'?'替换。
的解决方案是使用:
mysql_set_charset('utf8',$conn);
即使我们使用,这是必需的:
SET NAMES utf8
SET CHARACTER SET utf8
而且 - 因为我们已经使用ADOdb中那么我们需要找到PHP连接句柄。我们使用以下语句:
mysql_set_charset('utf8',$adoConn->_connectionID);
注意:您提供的所有文本/ *品种的页面都应该是UTF-8,**包括JavaScript文件**。如果页面是UTF-8并且JS文件不是,则某些浏览器会遇到问题。 – Piskvor 2009-11-13 12:03:13