mb_internal_encoding

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

mb_internal_encoding内部文字エンコーディングを設定あるいは取得する

説明

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

内部文字エンコーディングを設定あるいは取得します。

パラメータ

encoding

encoding は、HTTP 入力文字エンコーディング変換、 HTTP 出力文字エンコーディング変換および mbstring モジュールの文字列関数においてデフォルトの文字エンコーディングとして使用されます。 マルチバイト正規表現用のエンコーディングは、ここで扱う内部文字エンコーディングとは別であることに注意してください。

返り値

encoding が設定された場合、 成功した場合に true を、失敗した場合に false を返します。 このとき、マルチバイト正規表現用のエンコーディングは変更されません。 encoding が省略された場合、 現在の内部文字エンコーディング名を返します。

変更履歴

バージョン 説明
8.0.0 encoding は、nullable になりました。

例1 mb_internal_encoding() の例

<?php
/* 内部文字エンコーディングをUTF-8に設定 */
mb_internal_encoding("UTF-8");

/* 現在の内部文字エンコーディングを表示 */
echo mb_internal_encoding();
?>

参考

  • mb_http_input() - HTTP 入力文字エンコーディングを検出する
  • mb_http_output() - HTTP 出力文字エンコーディングを設定あるいは取得する
  • mb_detect_order() - 文字エンコーディング検出順序を設定あるいは取得する
  • mb_regex_encoding() - 現在のマルチバイト正規表現用のエンコーディングを取得または設定する

add a note add a note

User Contributed Notes 7 notes

up
8
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
2
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
1
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
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
0
Anonymous
8 years ago
Note that mb_internal_encoding is not necessary in PHP 5.6
up
-4
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
-10
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