如何正确处理 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 中的国际字符
LNMP架构(架构介绍,mysql安装,php安装,nginx介绍)
我如何确认 django 正在使用 xampp 的 mysql