2009-11-13 42 views
2

我需要在PHP中创建一个应用程序,可以处理所有地方的所有Unicode字符 - 编辑字段,静态HTML,数据库。有人可以告诉我需要设置/使用的所有参数/功能的完整列表以实现此目标吗?如何正确处理国际字符在PHP/MySQL/Apache

回答

7

阿帕奇

服务器编码必须是未设置,或设置为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在页面上的任意位置单击鼠标右键,然后选择显示页面信息。有效编码在该页面中列出。

+2

注意:您提供的所有文本/ *品种的页面都应该是UTF-8,**包括JavaScript文件**。如果页面是UTF-8并且JS文件不是,则某些浏览器会遇到问题。 – Piskvor 2009-11-13 12:03:13

1

有些事情做,你需要考虑: -

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 ...

1

建议您使用HTTP标头或元素元素来设置c utf-8将网页中的harset放在网页上。 W3C建议您同时执行这两个操作。 meta元素应该尽可能早地出现在页面上。 (meta元素之前的所有字符都应该是ASCII,这在几乎所有的字符编码中都是基本相同的,有些浏览器在遇到元标记时会重新启动页面渲染,这也是提早使用meta元素的另一个好理由。)

,在所有接受用户输入的表单上输入accept-charset="utf-8"属性。通常,提交POST数据的浏览器将默认使用页面的编码,但确保无损。

0

我用上述方法,他们工作得很好。直到最近,当我的提供者更新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);