mb_internal_encoding

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

mb_internal_encoding设置/获取内部字符编码

描述

mb_internal_encoding(?string $encoding = null): string|bool

设置/获取内部字符编码

参数

encoding

encoding 是用于 HTTP 输入字符编码转换、HTTP 输出字符编码转换以及 mbstring 模块定义的字符串函数的默认字符编码的字符编码名称。您应该注意,内部编码与多字节正则表达式的编码完全不同。

返回值

如果设置了 encoding,则在成功时返回 true,在失败时返回 false。在这种情况下,多字节正则表达式的字符编码不会改变。如果省略了 encoding,则返回当前字符编码名称。

错误/异常

从 PHP 8.0.0 开始,如果 encoding 的值是无效的编码,则会抛出 ValueError。在 PHP 8.0.0 之前,会发出 E_WARNING

变更日志

版本 描述
8.0.0 encoding 现在可以为空。
8.0.0 如果 encoding 是无效的编码,现在会抛出 ValueError。之前会发出 E_WARNING

示例

示例 #1 mb_internal_encoding() 示例

<?php
/* 将内部字符编码设置为 UTF-8 */
mb_internal_encoding("UTF-8");

/* 显示当前内部字符编码 */
echo mb_internal_encoding();
?>

参见

添加注释

用户贡献的注释 7 个注释

15
Joachim Kruyswijk
18 年前
特别是在编写用于不同服务器的 PHP 脚本时,强烈建议在每个提供的文档的顶部明确设置内部编码,例如

mb_internal_encoding("UTF-8");

这与 mysql 语句“SET NAMES 'utf8'”相结合,将节省大量调试问题。

此外,使用多字节字符串函数而不是您可能习惯使用的函数,例如 mb_strlen() 而不是 strlen() 等。
7
webfav at web dot de
8 年前
全部放在一起

<?php
// ------------------------------------------------------------

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

mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_regex_encoding('UTF-8');

// ------------------------------------------------------------
?>
4
mortoray at ecircle-ag dot com
19 年前
请注意,源文件中的字符串必须与您通过 mb_internal_encoding 指定的编码匹配。解析器似乎从文件中加载原始字节,并参考其内部编码来确定它们的实际编码。

为了说明这一点,当 /source/ 文件为 Latin-1 编码时,以下输出符合预期

<?php
mb_internal_encoding
("iso-8859-1");
mb_http_output( "UTF-8" );
ob_start("mb_output_handler");

echo
"???<br/>";

?>???

现在,mb_internal_encoding 的典型用法如下所示。将更改为“utf-8”,但保持 /source/ 文件编码不变

<?php
mb_internal_encoding
("UTF-8");
mb_http_output( "UTF-8" );
ob_start("mb_output_handler");

echo
"???<br/>";

?>???

输出将只显示 <br/> 标签,没有文本。

将文件保存为 UTF-8 编码,然后结果将符合预期。
0
Anonymous
9 年前
请注意,在 PHP 5.6 中,mb_internal_encoding 不是必需的
0
mdirks at gulfstreamcoach dot com
17 年前
回复 mortoray at ecircle-ag dot com

只要您将编码设置为更“Latin 1”兼容的内容(即 US-ACSII、ISO-8859-1、ISO-8859-1 或 Windows 1252),字符就会正常显示。PHP.net 自动检测为 UTF-8
-6
john leborgne
12 年前
我注意到,在我的全局网站配置文件 config.inc.php 中设置 mb_internal_encoding('UTF-8') 在我的类中不起作用:它又恢复为 ISO-8859-1。
在我的顶级网站类的构造函数中添加调用解决了这个问题。
-13
mortoray at ecircle-ag dot com
19 年前
对于前面的示例,PHP 注释似乎不支持带变音符号的字符,因此那里有问号 (?) 而不是应该有的带变音符号的字符。只需替换任何高阶/带重音符号的字符即可看到效果。
To Top