Mb decode numericentity: примеры (PHP)
Обратное преобразование числовых HTML-сущностей с помощью mb_decode_numericentity
Раздел: Многобайтовые строки
mb_decode_numericentity(string $string, array $map, ?string $encoding = null): stringтиповые примерыmb decode numericentity на js, python, mysqlmb decode numericentity изменения phpпримеры расширенные
Функция mb_decode_numericentity
Функция mb_decode_numericentity() преобразует числовые HTML-сущности в символы в заданной кодировке. Она используется при обработке текстов, которые были ранее преобразованы функцией mb_encode_numericentity(), например, для безопасной передачи данных или сохранения исходного набора символов.
Аргументы функции
$string(string) – исходная строка, содержащая числовые HTML-сущности.$map(array) – массив, определяющий диапазон кодов для преобразования. Формат:array(начало_кода, конец_кода, шаг, базовая_кодировка).$encoding(string, необязательный) – кодировка входной и выходной строки. Если не указана, используется внутренняя кодировка.$is_hex(bool, необязательный) – определяет, являются ли сущности шестнадцатеричными (true) или десятичными (false). По умолчанию false.
Базовые примеры использования
Простое декодирование десятичных сущностей
<?php
$str = 'Алфа';
$map = array(0x80, 0xffff, 0, 'UTF-8');
echo mb_decode_numericentity($str, $map, 'UTF-8');
?>Алфа
Декодирование шестнадцатеричных сущностей
<?php
$str = 'Алфа';
$map = array(0x80, 0xffff, 0, 'UTF-8');
echo mb_decode_numericentity($str, $map, 'UTF-8', true);
?>Алфа
Частичное декодирование диапазона
<?php
$str = 'AАBсC';
// Декодируем только кириллические символы (диапазон примерно 0x0400-0x04FF)
$map = array(0x400, 0x4FF, 0, 'UTF-8');
echo mb_decode_numericentity($str, $map, 'UTF-8');
?>AАBсC
Похожие функции в PHP
html_entity_decode()– преобразует все HTML-сущности в символы. В отличие от mb_decode_numericentity, работает с именованными сущностями (например, &) и не требует указания карты.htmlspecialchars_decode()– декодирует только специальные HTML-сущности (&, ", ', <, >).mb_encode_numericentity()– обратная функция, кодирует символы в числовые сущности.
Функцию mb_decode_numericentity предпочтительно использовать, когда нужно декодировать только определённый диапазон символов, ранее закодированный через mb_encode_numericentity.
Типичные ошибки
Неправильная карта (map)
<?php
$str = 'А';
// Неправильный порядок элементов в map
$map = array('UTF-8', 0, 0xffff, 0x80);
echo mb_decode_numericentity($str, $map, 'UTF-8');
?>Warning: mb_decode_numericentity(): Argument #2 ($map) must contain at least 4 elements
Неподходящая кодировка
<?php
$str = 'А';
$map = array(0x80, 0xffff, 0, 'UTF-8');
// Указана кодировка, несовместимая с символами
echo mb_decode_numericentity($str, $map, 'ASCII');
?>(символ может отобразиться некорректно или как пустота)
Смешанные типы сущностей при флаге is_hex
<?php
$str = 'Ал';
$map = array(0x80, 0xffff, 0, 'UTF-8');
// Флаг is_hex=true, но первая сущность десятичная
// Декодируется только вторая сущность
var_dump(mb_decode_numericentity($str, $map, 'UTF-8', true));
?>string(4) "Ал"
Изменения в версиях PHP
- PHP 8.0: параметр
$encodingстал необязательным и перемещён на третью позицию. Добавлен параметр$is_hexна четвёртую позицию. - PHP 7.4: функция стала принимать параметр
$encodingкак четвёртый аргумент (ранее был третьим). - PHP 5.6: добавлена поддержка констант кодировок, таких как
ISO-8859-1.
Расширенные примеры
Декодирование нескольких диапазонов
Пример php
<?php
$str = 'AАΩω';
// Декодируем латиницу (A-Z, a-z), кириллицу и греческие буквы
$result = $str;
$maps = [
[0x0041, 0x005A, 0, 'UTF-8'],
[0x0400, 0x04FF, 0, 'UTF-8'],
[0x0370, 0x03FF, 0, 'UTF-8']
];
foreach ($maps as $map) {
$result = mb_decode_numericentity($result, $map, 'UTF-8');
}
echo $result;
?>ААΩω
Обработка текста с сохранением нечисловых сущностей
Пример php
<?php
$str = 'Цена < €10 & > ₽5';
// Декодируем только числовые сущности для евро и рубля
$map = [0x80, 0xffff, 0, 'UTF-8'];
$decoded = mb_decode_numericentity($str, $map, 'UTF-8');
// Именованные сущности остаются
echo $decoded;
?>Цена < €10 & > ₽5
Фильтрация нежелательных символов через декодирование
Пример php
<?php
$str = 'Hello😊World👾';
// Декодируем только печатные ASCII-символы, смайлики останутся сущностями
$map = [0x20, 0x7E, 0, 'UTF-8'];
echo mb_decode_numericentity($str, $map, 'UTF-8');
?>Hello😊World👾
Работа с hex и dec сущностями в одной строке
Пример php
<?php
function decode_mixed($str, $map, $encoding) {
// Сначала десятичные
$str = mb_decode_numericentity($str, $map, $encoding, false);
// Затем шестнадцатеричные
return mb_decode_numericentity($str, $map, $encoding, true);
}
$str = 'A (dec) and A (hex) are both "A"';
$map = [0x0, 0xFFFF, 0, 'UTF-8'];
echo decode_mixed($str, $map, 'UTF-8');
?>A (dec) and A (hex) are both "A"
Альтернативы в других языках
Mb decode numericentity в Python
import html
s = 'Алфа'
print(html.unescape(s))Алфа
Mb decode numericentity в Javascript
let str = 'АлфЮ';
let decoded = str.replace(/(\d+);/g, (match, dec) => String.fromCharCode(dec));
console.log(decoded);АлфЮ
Mb decode numericentity в MySQL
SELECT CAST('АлфЮ' AS CHAR CHARACTER SET utf8);
-- Или с использованием функции:
SELECT CONVERT('АлфЮ' USING utf8);АлфЮ
Отличия: в других языках обычно есть встроенные функции для общего декодирования HTML-сущностей, но нет точного аналога с декодированием по заданной карте символов.
PHP mb_decode_numericentity function comments
En
Mb decode numericentity Decode HTML numeric string reference to character- Php mb decode numericentity - аргументы и возвращаемое значение
- Функция php mb_decode_numericentity - описание
- mb decode numericentity - примеры
- mb decode numericentity - похожие методы на php
- mb_decode_numericentity на js, python, mysql
- mb decode numericentity изменения php
- Примеры mb_decode_numericentity на php