如何最好地配置PHP来处理UTF-8网站

时间:2009-10-22 08:29:18

标签: php utf-8

您会推荐哪些扩展,以及如何最好地配置php来创建一个使用utf-8编码的网站。例如...

  • 页面输出为utf-8
  • 表单提交以utf-8
  • 编码的数据
  • 字符串数据的内部处理(例如与数据库交谈时)也都在utf-8中。

目前看来php并不能很好地应对多字节字符集。到目前为止,我已经确定mbstring看起来像是一个重要的扩展。

麻烦值得吗??

6 个答案:

答案 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