• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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