У меня есть PHP-код, который я использую для фильтрации текста. Во время фильтрации некоторые символы ASCII, такие как амперсанд (&) и тильда (~), временно преобразуются в младшие символы ASCII (например, десятичные кодовые точки 4 и 5). Непосредственно перед созданием окончательного отфильтрованного вывода преобразование отменяется.
$temp = str_replace(array('&', '~'), array("\x04", "\x05"), $input);
... some filtering code to work with $temp ...
$out = str_replace(array("\x04", "\x05"), array('&', '~'), $temp);
Это хорошо работает с входным текстом кодировок символов, использующих 8-битные кодовые единицы, такие как UTF-8 и ISO 8859-1. Но я не уверен насчет ввода, закодированного в более крупных единицах кода, таких как UTF-16 или UTF-32. Будет ли первый шаг преобразования искажать правильность ввода текста? Будет ли какой-то конфликт на этапе реверсии из-за некоторых ранее существовавших символов ввода? Установка PHP не перегружает многобайтовые строковые функции.
Кто-нибудь может прокомментировать? Спасибо.