我需要在PHP中创建一个可以处理所有地方的所有Unicode字符的应用程序 - 编辑字段,静态HTML,数据库。有人可以告诉我需要设置/用于实现这一目标的所有参数/功能的完整列表吗?
答案 0 :(得分:7)
<强>的Apache 强>
服务器编码必须未设置或设置为UTF-8。这是通过apache AddDefaultCharset指令完成的。这可以转到virtualhost或常规文件(参见文档)。
AddDefaultCharset utf-8
<强> MySQL的强>
SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'
<强> PHP 强>
1-您应该通过页面上的元标记或通过PHP标头将页面的HTML字符集设置为UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -or- header('Content-type: text/html; charset=utf-8');
2-你应该总是使用mb *版本的字符串相关函数,例如,mbstrlen而不是strlen来获取字符串的字符串长度。
这应该允许你从页面到数据到处都有UTF-8。您可以进行的测试:使用firefox右键单击页面上的任意位置,然后选择显示页面信息。有效编码列在该页面中。
答案 1 :(得分:1)
重要提示:从PHP连接到Mysql时,还应确保使用UTF-8作为连接字符集!
对于mysqli,这是由
完成的mysqli_set_charset($dblink, 'utf-8')
答案 2 :(得分:1)
您需要了解的一些事项: -
<强> PHP 强>
确保您的内容标记为utf-8:
default_charset = "utf-8"
安装mbstring。你可以找到它here
确保你在PHP和MySQL之间谈论utf-8
调用mysql_set_charset("utf8");
(或使用SQL查询SET NAMES utf8
)
<强>的Apache 强>
您还可以使用此类
在此处设置网页的Content-Type:
AddDefaultCharset utf-8
<强>的MySQL 强>
确保所有表格都使用utf8 Collation utf8_general_ci;例如
ALTER DATABASE mydb CHARACTER SET utf8;
<强>最后强>
最后,使用有趣的unicode样本测试内容like these ones
来自when I tried this ...
的更多有用信息答案 3 :(得分:1)
建议您使用HTTP标头或元元素将页面上的字符集设置为utf-8。 W3C建议您同时执行这两项操作。元元素应尽可能早地出现在页面上。 (元元素之前的所有字符都应该是ASCII,几乎所有字符编码都基本相同。有些浏览器会在遇到元标记时重新启动页面呈现,这是另一个很好的理由。)
此外,在接受用户输入的所有表单上都放置了accept-charset="utf-8"
属性。通常,提交POST数据的浏览器将默认为页面的编码,但确定无误。
答案 4 :(得分:0)
我使用了上述方法并且工作正常。直到最近,当我的提供商将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);