您会推荐哪些扩展,以及如何最好地配置php来创建一个使用utf-8编码的网站。例如...
目前看来php并不能很好地应对多字节字符集。到目前为止,我已经确定mbstring看起来像是一个重要的扩展。
麻烦值得吗??
答案 0 :(得分:50)
PHP内容与Unicode内容的假设问题有些夸大其词。自1998年以来,我一直在做多语言网站,直到我在某个地方读到这个网站时才知道可能存在问题 - 很多年以后网站都会出现。
这对我来说很好用:
Apache配置(在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
CREATE
您的数据库采用utf8_*
归类,
让表继承数据库排序规则和
使用"SET NAMES utf8"
HTML(在HEAD元素中)
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
答案 1 :(得分:3)
我遇到UTF-8 characters
同样的问题,Everything正在使用实时服务器和登台服务器,但有时它在我的开发机器上打破了。行为是如此奇怪,有时候字符编码正确,但在随机页面重新加载时,它开始打破Diamond Charters
'���เห็นอเวิลด์!���'
或Question mark
{{ 1}} 或85%的数据正确呈现 '??�เห็นอเวิลด์!???'
,但其余15%的数据显示不匹配的字符。我本来想解决这个问题。所以,从我的清单开始
1 - 检查HTML中添加的字符标题
2 - 检查MySQL表中是否保存了正确的数据
3 - 检查MySQL是否具有UTF-8的正确编码设置
4 - 检查Apache是否设置了处理UTF-8字符集
5 - 检查简单的PHP是否可以回复“เห็นอเวิลด์”输出相同的输入“เห็นอเวิลด์”
6 - 检查PHP是否发送正确的标头输出
7 - 检查MySQL查询是否获得相同的数据“เห็นอเวิลด์”
8 - 检查“เห็นอเวิลด์”是否有一些html字符,正确处理
9 - 检查“เห็นอเวิลด์”是否通过任何html编码解码功能
10-检查.htaccess是否全部设置为处理UTF-8字符集
检查以上列表中的所有内容以确定某些内容......破解。
试一试(我使用的是Codeigniter):
'เห็นอเวิลด์!?��'
最后别忘了说谢谢! :)到 @djn 回答
答案 2 :(得分:2)
php应付得很好!
您应该将php.ini“default_charset”参数设置为“utf-8”。
确保: -
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8"
/>
位于您所服务的每个页面的顶部。
有几个问题领域:
数据库 - 确保将它们配置为默认使用utf-8或进入一个痛苦的世界。
IDE /编辑 - 很多编辑都不支持utf-8。我通常使用vim,但它从来都不是一个大问题。
文档 - 花了整整一个下午让php从电子表格中读取泰语字符。我最终成功了,但仍然不确定我的做法是什么。
答案 3 :(得分:1)
如果mbstring还不是你的PHP包的一部分,那么我肯定会推荐给你 - 你甚至想用它来计算字符串长度(mb_strlen($ string_var,'utf8'))来表单输入... 否则,除了有效和正确的HTML,正确的http-server-config(因此服务器将提供未读取的utf-8页面)和带有utf-8支持的文本编辑器(例如Notepad ++)之外,您将不需要任何其他内容。
答案 4 :(得分:1)
在你的php.ini中,设置
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
因此您不需要每次都将编码参数传递给mb_函数。
答案 5 :(得分:0)
2018更新:::
请记住,这些php.ini条目已弃用;
PHP Version 7.2.9-1+ubuntu16.04.1+deb.sury.org+1
---------
yaz
YAZ Support enabled
PHP/YAZ Version 1.2.2
YAZ Version 4.2.30
Compiled with YAZ version 4.2.30
设置default_charset就足够了。
;mbstring.internal_encoding = utf-8
;mbstring.http_input =
;mbstring.http_output = utf-8