Mb encode numericentity: примеры (PHP)
mb_encode_numericentity(string $string, array $map, ?string $encoding = null, bool $hex = false): stringФункция mb_encode_numericentity
Функция mb_encode_numericentity преобразует символы строки в HTML-числовые сущности. Она относится к модулю Multibyte String (mbstring) и предназначена для обработки многобайтовых кодировок.
Функция применяется для безопасного вывода текста в HTML-документах, особенно когда необходимо закодировать символы, не входящие в выбранную кодировку страницы. Она предотвращает проблемы с отображением и снижает риски XSS-атак, преобразуя спецсимволы и символы из нестандартных диапазонов.
string $string: Обрабатываемая строка.
array $map: Массив, задающий диапазоны кодирования символов. Каждый элемент массива - массив из двух целых чисел (коды начального и конечного символов).
?string $encoding = null: Кодировка строки. Если null, используется внутренняя кодировка.
bool $hex = false: Если true, возвращает шестнадцатеричные числовые сущности (например, ჿ). По умолчанию - десятичные (ჿ).
Примеры использования
<?php
$str = "Привет, мир!";
$map = [0x0410, 0x044F]; // Диапазон кириллицы в Unicode
$result = mb_encode_numericentity($str, [$map]);
echo htmlspecialchars($result);
?>Привет, мир!
<?php
$str = "Символ €";
$map = [0x80, 0x10FFFF]; // Широкий диапазон
$result = mb_encode_numericentity($str, [$map], 'UTF-8', true);
echo htmlspecialchars($result);
?>Символ €
Альтернативные функции в PHP
htmlspecialchars(): Преобразует спецсимволы HTML (&, ", ', <, >) в сущности. Используется для базовой защиты от XSS.
htmlentities(): Преобразует все символы, имеющие HTML-сущности. Менее эффективна для многобайтовых строк.
mb_convert_encoding(): Конвертирует строку между кодировками, но не создает числовые сущности.
Функцию mb_encode_numericentity выбирают для точного контроля над диапазонами кодируемых символов и работы с многобайтовыми кодировками.
Типичные ошибки
<?php
$str = "Test";
$result = mb_encode_numericentity($str, [[0, 10]]); // Диапазон без указания кодировки
?>// Символы вне диапазона не преобразуются
<?php
$str = "Яндекс";
$result = mb_encode_numericentity($str, [[0x80, 0x10FFFF]], 'ASCII');
?>// Может возникнуть искажение строки
<?php
$str = "A";
$result = mb_encode_numericentity($str, [[65, 65]], null, 'yes');
?>// TypeError в PHP 8.0+
Изменения в версиях PHP
В PHP 8.0 параметры $encoding и $hex стали обязательными в определенных контекстах. Тип параметра $hex изменен на bool, неявные преобразования вызывают ошибку.
В PHP 7.4 добавлена возможность указывать $encoding как null для использования внутренней кодировки.
До PHP 5.4 функция имела проблемы с некоторыми многобайтовыми кодировками.
Расширенные примеры
<?php
$str = "A©€????";
// Кодируем только смайлики (диапазон эмодзи)
$map = [0x1F300, 0x1F5FF];
$result = mb_encode_numericentity($str, [$map], 'UTF-8', true);
echo htmlspecialchars($result);
?>A©€🐘
<?php
$str = "中文 + English = Смесь";
$maps = [
[0x4E00, 0x9FFF], // Китайские иероглифы
[0x0400, 0x04FF] // Кириллица
];
$result = mb_encode_numericentity($str, $maps);
echo htmlspecialchars($result);
?>中文 + English = Смесь
<?php
$str = "<div>Привет</div>";
// Сначала экранируем HTML, затем кодируем кириллицу
$str = htmlspecialchars($str);
$result = mb_encode_numericentity($str, [[0x0410, 0x044F]]);
echo $result;
?><div>Привет</div>
Альтернативы в других языках
import html
result = html.escape("Символ < €")
print(result) # Простые сущности
# Для числовых сущностей:
print("".join(f"&#{ord(c)};" for c in "€"))Символ < € €
Mb encode numericentity в Javascript
function encodeNumeric(str) {
return str.replace(/[^\x00-\x7F]/g, c => `&#${c.charCodeAt(0)};`);
}
console.log(encodeNumeric("€"));€
Mb encode numericentity в MySQL
SELECT HEX('€'); -- Возвращает шестнадцатеричное значениеE282AC
PHP mb_encode_numericentity function comments
- Php mb encode numericentity - аргументы и возвращаемое значение
- Функция php mb_encode_numericentity - описание
- mb encode numericentity - примеры
- mb encode numericentity - похожие методы на php
- mb_encode_numericentity на js, python, mysql
- mb encode numericentity изменения php
- Примеры mb_encode_numericentity на php