• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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;
?>
 
M

MajestiC

Модификаторы регулярных выражений.

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));
 
S

_serg_

После применения к нему функции preg_replace тест становится не читабельным, т.е. появляются в броузере знаки вопроса.
а в хттп-заголовке какая кодировка прописана?
 
S

Sergvic

Стои utf-8
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
K

korvin0

Какая у тебя версия 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;
?>
 
S

Sergvic

Вот спасибо. Через iconv работает.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!