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

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

Sergvic

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

MajestiC

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

u (PCRE_UTF8)

Этот модификатор включает дополнительную функциональность PCRE, которая не совместима с Perl: шаблоны обрабатываются как UTF8 строки. Модификатор u доступен в PHP 4.1.0 и выше для Unix-платформ, и в PHP 4.2.3 и выше для Windows платформ.
http://www.php.net/manual/ru/reference.pcr...n.modifiers.php

В итоге нужно заменить
$string = strtolower(preg_replace('/\s+/','_',$string));
на
$string = strtolower(preg_replace('/\s+/u','_',$string));
 
S

_serg_

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

Sergvic

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

korvin0

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