• ⚡️ Последний шанс: Вебинар по пентесту стартует через 30 минут!

    Друзья, ровно через 30 минут (8 июля в 19:00) начинается наш практический вебинар по пентесту и поиску уязвимостей!

    Если вы хотите:
    🕵️‍♀️ Узнать, как находить и эксплуатировать уязвимости в веб-приложениях.
    💡 Получить ценные инсайты от настоящего эксперта.
    🚀 Сделать решительный шаг в мир кибербезопасности.
    То этот вебинар для вас!

    Ведущий вебинара – Александр Медведев – эксперт с более чем 10-летним опытом в сфере информационной безопасности, пятикратный победитель Standoff и обладатель престижных сертификаций: OSWE, OSCP, PNPT, CEH, CWAPT.

    Успейте присоединиться! Зарегистрироваться сейчас

    Возникли сложности с регистрацией? Пишите нам: @Codeby_Academy
    Будем вас ждать!

Preg_replace и кодировка Utf-8

  • Автор темы Автор темы Sergvic
  • Дата начала Дата начала
S

Sergvic

Есть русский текст в кодировке UTF-8. После применения к нему функции preg_replace тест становится не читабельным, т.е. появляются в броузере знаки вопроса.
Использовал для проверки такой скрипт
Код:
<?
setlocale("LC_ALL","ru_RU");
$string="Ваш выбор";
echo $string;
$string = strtolower(preg_replace('/\s+/','_',$string));
echo $string;
?>
 
Модификаторы регулярных выражений.

u (PCRE_UTF8)

Этот модификатор включает дополнительную функциональность PCRE, которая не совместима с Perl: шаблоны обрабатываются как UTF8 строки. Модификатор u доступен в PHP 4.1.0 и выше для Unix-платформ, и в PHP 4.2.3 и выше для Windows платформ.



В итоге нужно заменить
$string = strtolower(preg_replace('/\s+/','_',$string));
на
$string = strtolower(preg_replace('/\s+/u','_',$string));
 
После применения к нему функции preg_replace тест становится не читабельным, т.е. появляются в броузере знаки вопроса.
а в хттп-заголовке какая кодировка прописана?
 
Стои utf-8
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
Какая у тебя версия PHP?

Только с версии 5.0.5 PCRE обновили до 5.0 (http://www.php.net/ChangeLog-5.php#5.0.5) => До этого не работало как надо UTF-8 в pcre.

Если iconv подключен, можешь конвертить в другую кодировку и там preg_replace'ить:
<?
$string="Ваш выбор";
echo $string;
$string = strtolower(preg_replace('/\s+/','_',iconv('UTF-8','cp1251',$string)));
$string = iconv('cp1251','UTF-8',$string);
echo $string;
?>
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab