如何最好地configurationPHP来处理一个UTF-8网站

你会推荐什么样的扩展,以及如何最好地configurationphp来创build一个使用UTF-8编码的网站。 例如…

  • 页面输出是utf-8
  • 表单提交utf-8编码的数据
  • string数据的内部处理(例如,当与数据库交谈时)也都在utf-8中。

看来,PHP目前还不能很好地处理多字节字符集。 到目前为止,我已经认识到, mbstring看起来像是一个重要的扩展。

这是值得的麻烦..?

与Unicode内容的PHP假设的问题已经有点夸大了。 自1998年以来,我一直在做多种语言的网站,从来不知道有什么问题,直到我读了一些地方 – 多年后,网站。

这对我来说很好:

Apacheconfiguration(在httpd.conf或.htaccess中)

AddDefaultCharset utf-8 

PHP(在php.ini中)

 default_charset = "utf-8" mbstring.internal_encoding=utf-8 mbstring.http_output=UTF-8 mbstring.encoding_translation=On mbstring.func_overload=6 

MySQL的

使用utf8_*sortingutf8_* CREATE数据库,让表inheritance数据库sorting规则并使用"SET NAMES utf8"启动每个连接

HTML(在HEAD元素中)

 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

PHP应付就好了!

您应该将php.ini“default_charset”参数设置为“utf-8”。

确保: –

 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

位于您所服务的每一页的顶部。

有几个问题领域:

数据库 – 确保它们被configuration为默认使用utf-8或进入一个痛苦的世界。

IDE /编辑器 – 很多编辑器不支持utf-8。 我通常使用vim,但它从来不是一个大问题。

文件 – 只花了整整一个下午让PHP读取电子表格中的泰国字符。 我终于成功了,但我仍然不确定我做了什么。

我面对UTF-8 characters相同的问题,一切都在活服务器和登台服务器上工作,但有时它在我的开发机器上打破。 行为是如此奇怪,有些时候字符编码正确,但随机页面重新加载它开始打破与Diamond Charters ' เห็นอเวิลด์! 'Question mark '?? เห็นอเวิลด์!???' 或85%的数据正在呈现'เห็นอเวิลด์!? '但其余15%显示无与伦比的字符。 我正在寻求解决这个问题。 所以,从我的清单开始

1 – 检查在HTML中添加的字符标题


2 – 检查数据是否保存在MySQL表中


3 – 检查MySQL是否有正确的UTF-8编码设置


4 – 检查Apache是​​否有设置来处理UTF-8字符集


5 – 检查简单的PHP是否可以回显与input相同的“เห็นอเวิลด์”输出“เห็นอเวิลด์”


6 – 检查PHP是否发送正确的Headers输出


7 – 检查MySQL查询是否获得相同的数据“เห็นอเวิลด์”


8 – 检查“เห็นอเวิลด์”是否有一些html字符,妥善处理


9 – 检查通过任何html编码解码function的“เห็นอเวิลด์”


10-检查.htaccess是否全部设置为处理UTF-8字符集


检查所有上面的列表,找出哪里..断。

试一试(我正在使用Codeigniter):

 ================================= :: PHP ini Settings:: ================================= default_charset = "utf-8" mbstring.internal_encoding=utf-8 mbstring.http_output=UTF-8 mbstring.encoding_translation=On mbstring.func_overload=6 ================================= :: .htaccess Settings:: ================================= DefaultLanguage en-US AddDefaultCharset UTF-8 ================================= :: HTML Header Page:: ================================= <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ================================= :: PHP Codeigniter index.php :: ================================= header('Content-Type: text/html; charset=UTF-8'); ================================= :: Codeigniter config.php :: ================================= $config['charset'] = 'UTF-8'; ================================= :: Codeigniter database.php :: ================================= $db['default']['char_set'] = 'utf8'; $db['default']['dbcollat'] = 'utf8_general_ci'; ================================= :: Codeigniter helper function (optional) ================================= if(!function_exists('safe_utf_string')){ function safe_utf_string($utf8string= ''){ $utf8string = htmlspecialchars($utf8string, ENT_QUOTES, 'UTF-8'); return mb_convert_encoding($utf8string, 'UTF-8'); } } 

最后别忘了说谢谢! :)到@djn的答案

如果mbstring不是你的PHP包的一部分,那么我肯定会推荐给你 – 你甚至会想要用它来计算string长度(mb_strlen($ string_var,'utf8'))以用于表单input…否则,除了有效和正确的HTML,一个正确的http-server-config(所以服务器将提供utf-8的页面)和一个带有utf-8支持的文本编辑器(例如Notepad ++)之外,你不需要任何东西。

在你的php.ini中,设置

 mbstring.internal_encoding = UTF-8 mbstring.encoding_translation = On 

所以你不需要每次都传递一个编码参数给mb_函数。