PHP Conference Japan 2024

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();
?>

参见

添加注释

用户贡献注释 5条注释

Joachim Kruyswijk
18年前
尤其是在编写用于不同服务器的PHP脚本时,最好在每个服务文档的顶部显式设置内部编码,例如:

mb_internal_encoding("UTF-8");

这与mysql语句“SET NAMES 'utf8'”结合使用,将节省大量的调试工作。

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

<?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');

// ------------------------------------------------------------
?>
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编码,然后结果将符合预期。
匿名
9年前
请注意,在PHP 5.6中不需要mb_internal_encoding
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
To Top