PHPerKaigi 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 可以为 null。
8.0.0 如果 encoding 是无效编码,现在抛出 ValueError。以前发出的是 E_WARNING

示例

示例 #1 mb_internal_encoding() 示例

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

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

参见

add a note

User Contributed Notes 7 notes

up
15
Joachim Kruyswijk
17 years ago
Especially when writing PHP scripts for use on different servers, it is a very good idea to explicitly set the internal encoding somewhere on top of every document served, e.g.

mb_internal_encoding("UTF-8");

This, in combination with mysql-statement "SET NAMES 'utf8'", will save a lot of debugging trouble.

Also, use the multi-byte string functions instead of the ones you may be used to, e.g. mb_strlen() instead of strlen(), etc.
up
7
webfav at web dot de
8 years ago
all together

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

// ------------------------------------------------------------
?>
up
5
mortoray at ecircle-ag dot com
18 years ago
Be aware that the strings in your source files must match the encoding you specify by mb_internal_encoding. It appears the Parser loads raw bytes from the file and refers to its internal encoding to determine their actual encoding.

To demonstrate, the following outputs as espected when the /source/ file is Latin-1 encoded:

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

echo
"???<br/>";

?>???

Now, a typical use of mb_internal_encoding is shown as follows. Make the change to "utf-8" but leave the /source/ file encoding unchanged:

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

echo
"???<br/>";

?>???

The output will just show the <br/> tag and no text.

Save the file as UTF-8 encoding and then the results will be as expected.
up
0
Anonymous
8 years ago
Note that mb_internal_encoding is not necessary in PHP 5.6
up
-1
mdirks at gulfstreamcoach dot com
16 years ago
In response to mortoray at ecircle-ag dot com:

The characters display fine as long as you set the Encoding to something more "Latin 1" compatible (i.e. US-ACSII, ISO-8859-1, ISO-8859-1, or Windows 1252). PHP.net auto-detects to UTF-8
up
-6
john leborgne
11 years ago
i noticed that setting mb_internal_encoding('UTF-8') in my global site config.inc.php, doesn't work in my classes : it reverse back to ISO-8859-1.
Adding the call to the constructor of my top site class resolve this.
up
-13
mortoray at ecircle-ag dot com
18 years ago
To previous example, the PHP notes don't appear to support umlauted characters so there are question marks (?) there instead of what should be umlauated oue. Just substitute any high-order/accented character to see the effect.
To Top