将 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

至于修改iconvexifmssql 编码设置,您可能不需要设置这些(无论如何,您的设置已将这些注释掉)但最好将它们全部更改为无论如何都是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?的主要内容,如果未能解决你的问题,请参考以下文章

将JDK默认编码设置为UTF-8

在网页设计中怎么设置浏览器编码为utf-8?

在网页设计中怎样设置浏览器编码为utf-8

如何设置eclipse默认编码为utf-8

设置myeclipse新建jsp文件默认编码为UTF-8

如何为 Eclipse 中的 Java 源文件设置为 UTF-8 默认编码