如何最好地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_函数。