PHP Conference Nagoya 2025

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 функция выбрасывает исключение ValueError, если в параметр encoding передали недопустимое значение кодировки. До PHP 8.0.0 вместо этого функция выдавала ошибку уровня E_WARNING.

Список изменений

Версия Описание
8.0.0 Теперь параметр encoding принимает значение null.
8.0.0 Теперь функция выбрасывает исключение ValueError, если в параметр encoding передали недопустимое значение кодировки. Раньше вместо этого функция выдавала ошибку уровня E_WARNING.

Примеры

Пример #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() - Устанавливает или получает кодировку символов для многобайтового регулярного выражения

Добавить

Примечания пользователей 5 notes

up
15
Joachim Kruyswijk
18 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
9 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
4
mortoray at ecircle-ag dot com
19 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
Anonymous
9 years ago
Note that mb_internal_encoding is not necessary in PHP 5.6
up
0
mdirks at gulfstreamcoach dot com
17 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
To Top