(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
mb_internal_encoding — Set/Get internal character encoding
Set/Get the internal character encoding
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.
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.
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.
Version | Description |
---|---|
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.
|
Example #1 mb_internal_encoding() example
<?php
/* Set internal character encoding to UTF-8 */
mb_internal_encoding("UTF-8");
/* Display current internal character encoding */
echo mb_internal_encoding();
?>
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.
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');
// ------------------------------------------------------------
?>
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.
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