【问题标题】:Do I need to set ini_set( 'default_charset', 'UTF-8' );?我需要设置 ini_set( 'default_charset', 'UTF-8' ); 吗?
【发布时间】:2012-01-04 00:10:57
【问题描述】:

我的每个页面的框架如下:

ini_set('mbstring.internal_encoding','UTF-8');
ini_set('mbstring.func_overload',7);
header('Content-Type: text/html; charset=UTF-8');

我也需要ini_set( 'default_charset', 'UTF-8' );吗?

【问题讨论】:

标签: php unicode


【解决方案1】:

不,你不必这样做。

header('Content-Type: text/html; charset=UTF-8');

已经为每个页面设置了这个

【讨论】:

  • 这并不能涵盖所有内容。正如@itpastorn 和 kzqai 进一步指出的那样,有一些 PHP 函数,例如具有查看 default_charset 的 htmlentities(和其他)。
  • 如果您使用 UTF-8 并且 php.ini 中的 default_charset 指令设置为其他编码,尤其是另一种多字节编码,那么即使您将 internal_encoding 设置为 UTF,您也会遇到问题-8 在 php.ini 中。这是因为 htmlentities 和 htmlspecialchars 等某些函数需要 default_charset,除非另有说明。如上述评论所述,您需要在 php.ini 中将 default_charset 设置为 UTF-8。
【解决方案2】:

请参阅https://bugs.php.net/bug.php?id=29983 在我看来,某些发行版仍然存在问题

测试用例

echo "ini_get('default_charset') ". ini_get('default_charset')."<br>";

if (!ini_set('default_charset', 'utf-8')) {
echo "could not set default_charset to utf-8<br>";
}

【讨论】:

  • 这... ...非常令人担忧。我正在使用 php 5.5 运行 ubuntu 14.04,但这仍然会发生......
【解决方案3】:

当涉及到 http-header 时,您可以按照其他答案的说明进行操作。

但是:有些函数是默认字符集感知的

来自FILTER_SANITIZE_FULL_SPECIAL_CHARS的描述:

像 htmlspecialchars 一样,这个过滤器知道 default_charset 并且如果一个序列 检测到构成当前无效字符的字节 字符集,然后整个字符串被拒绝,导致 0 长度字符串。

【讨论】:

【解决方案4】:

default_charset ini 设置应该适合你。默认情况下,PHP 始终在 Content-type: 标头中使用此设置输出字符编码

【讨论】:

    猜你喜欢
    • 2013-07-28
    • 2020-08-04
    • 2011-05-12
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2020-11-16
    相关资源
    最近更新 更多