如何正确处理 PHP / MySQL / Apache 中的国际字符

Posted

技术标签:

【中文标题】如何正确处理 PHP / MySQL / Apache 中的国际字符【英文标题】:How to properly handle international character in PHP / MySQL / Apache 【发布时间】:2010-12-16 06:30:12 【问题描述】:

我需要用 php 创建一个可以处理所有地方的所有 Unicode 字符的应用程序——编辑字段、静态 html、数据库。有人可以告诉我需要设置/用于实现此目标的所有参数/功能的完整列表吗?

【问题讨论】:

【参考方案1】:

我使用了上述方法,并且效果很好。直到最近,当我的提供商将 PHP 更新到 5.2.11 并将 mysql 更新到 5.0.81-community 时。在此更改之后,从数据库中正确检索了 unicode 字符,但所有更新都已损坏,并且 unicode 字符被替换为“?”。

解决方案是使用:

mysql_set_charset('utf8',$conn);

即使我们使用了它也是必需的:

SET NAMES utf8
SET CHARACTER SET utf8

另外 - 因为我们使用了 ADOdb,所以我们需要找到 PHP 连接句柄。我们使用了以下语句:

mysql_set_charset('utf8',$adoConn->_connectionID);

【讨论】:

【参考方案2】:

建议您使用 HTTP 标头或元元素将页面上的字符集设置为 utf-8。 W3C 建议您两者都做。并且元元素应该尽早出现在页面上。 (meta元素之前的所有字符都应该是ASCII,在几乎所有的字符编码中基本一致。有些浏览器遇到meta标签会重启页面渲染,这也是提早拥有它的另一个好理由。)

此外,在所有接受用户输入的表单上放置一个accept-charset="utf-8" 属性。一般浏览器提交 POST 数据时会默认使用页面的编码,但确定也无妨。

【讨论】:

【参考方案3】:【参考方案4】:

您需要研究的一些事项:-

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

٩(͡๏̯͡๏)۶

更多有用信息来自when I tried this...

【讨论】:

【参考方案5】:

重要提示:从 PHP 连接到 Mysql 时,还应确保使用 UTF-8 作为连接字符集!

对于 mysqli,这是由

完成的
mysqli_set_charset($dblink, 'utf-8')

http://de3.php.net/manual/en/mysqli.set-charset.php

【讨论】:

以上是关于如何正确处理 PHP / MySQL / Apache 中的国际字符的主要内容,如果未能解决你的问题,请参考以下文章

如何正确处理 PHP / MySQL / Apache 中的国际字符

处理 PHP 和 MySQL 中的“布尔”值

LNMP架构(架构介绍,mysql安装,php安装,nginx介绍)

我如何确认 django 正在使用 xampp 的 mysql

如何在 PHP 函数中正确使用 MySQL 查询? [关闭]

如何通过 PHP 和 mysql 正确转义字符串