Hướng dẫn mb_language php

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

mb_languageSet/Get current language

Description

mb_language(?string $language = null): string|bool

Parameters

language

Used for encoding e-mail messages. The valid languages are listed in the following table. mb_send_mail() uses this setting to encode e-mail.

LanguageCharsetEncodingAlias
German/de ISO-8859-15 Quoted-Printable Deutsch
English/en ISO-8859-1 Quoted-Printable  
Armenian/hy ArmSCII-8 Quoted-Printable  
Japanese/ja ISO-2022-JP BASE64  
Korean/ko ISO-2022-KR BASE64  
neutral UTF-8 BASE64  
Russian/ru KOI8-R Quoted-Printable  
Turkish/tr ISO-8859-9 Quoted-Printable  
Ukrainian/ua KOI8-U Quoted-Printable  
uni UTF-8 BASE64 universal
Simplified Chinese/zh-cn HZ BASE64  
Traditional Chinese/zh-tw BIG-5 BASE64  

Return Values

If language is set and language is valid, it returns true. Otherwise, it returns false. When language is omitted or null, it returns the language name as a string.

Changelog

VersionDescription
8.0.0 language is nullable now.

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

mb_internal_encodingSet/Get internal character encoding

Description

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

Parameters

encoding

encoding is the character encoding name used for the HTTP input character encoding conversion, HTTP output character encoding conversion, and the default character encoding for string functions defined by the mbstring module. You should notice that the internal encoding is totally different from the one for multibyte regex.

Return Values

If encoding is set, then Returns true on success or false on failure. In this case, the character encoding for multibyte regex is NOT changed. If encoding is omitted, then the current character encoding name is returned.

Errors/Exceptions

As of PHP 8.0.0, a ValueError is thrown if the value of encoding is an invalid encoding. Prior to PHP 8.0.0, a E_WARNING was emitted instead.

Changelog

VersionDescription
8.0.0 encoding is nullable now.
8.0.0 Now throws a ValueError if encoding is an invalid encoding. Previously a E_WARNING was emitted instead.

Examples

Example #1 mb_internal_encoding() example

/* Set internal character encoding to UTF-8 */
mb_internal_encoding("UTF-8");/* Display current internal character encoding */
echo mb_internal_encoding();
?>

See Also

  • mb_http_input() - Detect HTTP input character encoding
  • mb_http_output() - Set/Get HTTP output character encoding
  • mb_detect_order() - Set/Get character encoding detection order
  • mb_regex_encoding() - Set/Get character encoding for multibyte regex

Joachim Kruyswijk

16 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.

webfav at web dot de

7 years ago

all together

// ------------------------------------------------------------ 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

17 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:

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

    echo

"???
"
;?>???

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:

    mb_internal_encoding("UTF-8");
   
mb_http_output( "UTF-8" );
   
ob_start("mb_output_handler");

    echo

"???
"
;?>???

The output will just show the
tag and no text.

Save the file as UTF-8 encoding and then the results will be as expected.

mdirks at gulfstreamcoach dot com

15 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

Anonymous

7 years ago

Note that mb_internal_encoding is not necessary in PHP 5.6

john leborgne

10 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.

mortoray at ecircle-ag dot com

17 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.