Category Archives: UTF-8

Искажение символов на PHP-сайте

В одном из проектов пришлось столкнуться со следующей задачей: в конце строки использовался символ кириллицы русская буква «г» с предшествующим пробелом. Нужно было скриптом удалить ее.

Попробовал использовать следующий код:

$stroka=trim($stroka,’ г’);

Все прекрасно работало, пока сайт не переехал на кодировку UTF-8 (ранее использовалась Windows-1251)

После смены кодировки выяснилась одна особенность работы функции trim в php: эта функция не поддерживает кодировку и просто просматривает отдельные байты. Если отправлять вторым аргументом символы кириллицы закодированной в UTF-8, то в строке будут искаться байты в соответствии с кодировкой, с чем trim справляется не совсем корректно, попутно удаляя лишние байты, приводя к искажению некоторых символов на сайте, например, в рассматриваемом случае всегда происходило искажение первого символа в строке и вместо него выводился символ �.

Результат поисков решения привел к отказу от использования функции trim, благо, функционал php довольно разнообразен. Рассмотрев варианты было принято решение использовать замену регулярными выражениями:

$stroka=preg_replace('/ г$/u', '',$stroka']);
Code language: PHP (php)

После проведенной замены искажение символов перестало происходить.

Войти

Зарегистрироваться

Сбросить пароль

Пожалуйста, введите ваше имя пользователя или эл. адрес, вы получите письмо со ссылкой для сброса пароля.