【发布时间】:2010-12-16 06:30:12
【问题描述】:
我需要用 PHP 创建一个可以处理所有地方的所有 Unicode 字符的应用程序——编辑字段、静态 HTML、数据库。有人可以告诉我需要设置/用于实现此目标的所有参数/功能的完整列表吗?
【问题讨论】:
我需要用 PHP 创建一个可以处理所有地方的所有 Unicode 字符的应用程序——编辑字段、静态 HTML、数据库。有人可以告诉我需要设置/用于实现此目标的所有参数/功能的完整列表吗?
【问题讨论】:
我使用了上述方法,并且效果很好。直到最近,当我的提供商将 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);
【讨论】:
建议您使用 HTTP 标头或元元素将页面上的字符集设置为 utf-8。 W3C 建议您两者都做。并且元元素应该尽早出现在页面上。 (meta元素之前的所有字符都应该是ASCII,在几乎所有的字符编码中基本一致。有些浏览器遇到meta标签会重启页面渲染,这也是提早拥有它的另一个好理由。)
此外,在所有接受用户输入的表单上放置一个accept-charset="utf-8" 属性。一般浏览器提交 POST 数据时会默认使用页面的编码,但确定也无妨。
【讨论】:
您需要研究的一些事项:-
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...
【讨论】:
重要提示:从 PHP 连接到 Mysql 时,还应确保使用 UTF-8 作为连接字符集!
对于 mysqli,这是由
完成的mysqli_set_charset($dblink, 'utf-8')
【讨论】: