将 PHP 默认编码设置为 utf-8?
Posted
技术标签:
【中文标题】将 PHP 默认编码设置为 utf-8?【英文标题】:Setting the PHP default encoding to UTF-8 【发布时间】:2012-03-10 05:40:47 【问题描述】:在“php Cookbook”中,他们说 (p.589) 要将传出数据的 char 编码正确设置为 utf-8,有必要将 default_encoding
配置编辑为 utf-8。
但是,我在php.ini
中找不到此配置。我是否应该简单地添加一行 default_encoding = "utf-8"
?
我确实有一个 ;default_charset = "iso-8859-1"
。如您所见(;
),现在它没有被激活。我应该删除分号并将其设置为"utf-8"
吗?这会处理默认编码吗?
我还发现了其他我不知道该怎么做的编码指令:
[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1
...
; http://php.net/exif.encode-unicode
;exif.encode_unicode = ISO-8859-15
...
;mssql.charset = "ISO-8859-1"
...
;exif.encode_unicode = ISO-8859-15
我有什么理由不应该简单地将它们全部替换为utf-8
?
【问题讨论】:
【参考方案1】:您应该将 default_charset
设置为 UTF-8:
default_charset = "utf-8"
(如果他们要求您更改default_encoding
,PHP Cookbook 中可能有错字——我从未听说过。)
如果您要输出 UTF-8 编码的字符,您还需要确保您的网络服务器设置为输出 UTF-8。在 Apache 中,这可以在 httpd.conf 文件中设置:
AddDefaultCharset UTF-8
至于修改iconv
、exif
和mssql
编码设置,您可能不需要设置这些(无论如何,您的设置已将这些注释掉)但最好将它们全部更改为无论如何都是UTF-8。
【讨论】:
对于 Apache,我没有http.conf
文件。我使用 WAMPserver,他们使用 httpd.conf
文件发布 Apache。我想他们是一样的吗?另外,这是您手动添加的行吗?我的httpd.conf
文件中没有关于字符集的内容。
这实际上是我的错字(已更正)。如果您在配置文件中没有看到对AddDefaultCharset
的引用,您可能需要查看配置包含的文件(类似于Include conf/extra/[something]
),看看它是否在其中任何一个中设置。如果没有,只需将其添加到主 httpd.conf 文件中。
是否有某种解释来解释所有这些编码函数的作用?
@CMCDragonkai - 您只是要求对字符编码进行一般性解释,或者特别是列出的设置控制什么?
列出的设置。 iconv 和 mb_string 有很多内容。【参考方案2】:
修改行
;default_charset = "iso-8859-1"
阅读
default_charset = "utf-8"
关于其他选项,请勿触摸。避免默认设置,始终明确设置你所做的一切的编码
数据库连接, 读写文件, 使用 iconv 进行转换。另外,请注意保存 PHP 文件的编码,确保它们是 UTF-8 格式,尤其是当它们包含要显示或比较的字符串时。
【讨论】:
【参考方案3】:我的 mysql 查询遇到了一个问题,它无法识别某些拉丁分音符号,因此查询会失败。我以为它可能是 php 文件等等,直到我发现使用 pdo 调用 mysql 我必须添加字符集。奇怪的是我以前使用的服务器运行良好!
$dsn = 'mysql:host=localhost;dbname=retirodo_main;charset=utf8';
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^
【讨论】:
@Marcos 当您编辑答案时,我看到粗体丢失了,并翻译为“ ** ” ... asnwer 不应该是您看到的那个文本。因为那是粗体降价。 已修复,@miguel,抱歉【参考方案4】:在 htaccess 级别(.htaccess 文件),php 指令应该是php_value default_charset UTF-8
【讨论】:
【参考方案5】:为了解决问题,我将“UTF-8”更改为“UTF-8”(没有破折号),而是解决了问题。
CentOS
伊扎亚斯·莫拉
【讨论】:
以上是关于将 PHP 默认编码设置为 utf-8?的主要内容,如果未能解决你的问题,请参考以下文章