@rv9ufz
Кратко о себе

PHP, как отфильтровать нежелательные символы UTF-8 в текстовой строке?

Суть проблемы: есть произвольная входная текстовая переменная, куда могут попадать различные непотребства: смайлы, спецсимволы и так далее, из-за чего при дальнейшем выводе в браузере может получиться каша.

Гуглил различные решения, перепробовал все из имеющихся, например, отсюда https://stackoverflow.com/questions/1176904/php-ho...

Такие варианты, как
preg_replace( '/[^[:print:]]/'
Или
filter_var($input, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW|FILTER_FLAG_STRIP_HIGH);

Работают, убирают из строки всю ерунду, но включая кириллицу. Остаются только символы английской раскладки.

Подскажите, пожалуйста, какой-нибудь годный вариант фильтрации, убирающий все непечатаемые символы, но не затрагивающий различные раскладки клавиатуры.
  • Вопрос задан
  • 315 просмотров
Пригласить эксперта
Ответы на вопрос 2
php666
@php666
PHP-макака
при дальнейшем выводе в браузере может получиться каша
что значит каша?
В какой кодировке данные в базе? В какой кодировке ответ сервера?

Есть мнение, что надо просто унифицировать кодировку проекта к utf8mb4 и не заниматься ерундой.
Ответ написан
Комментировать
@galaxy
Юникод - это сложно. Надежнее всего оставить ascii и нужный алфавит (русский, например), рейнжи должны работать ([а-я] или другие варианты).

Если нужны любые алфавиты, фильтруйте по пропертям.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы