проблемы кодировки (preg_replace не различает регистр, setlocale не помогает)

jeno

Новичок
проблемы кодировки (preg_replace не различает регистр, setlocale не помогает)

Добрый вечер.

Долбался сам очень долго,решения таки не нашел (

вообщем, все рнр файлы и данные mysql в кодировке UTF8, кодировка страницы тоже в UTF8...

пробумаю выполнить preg_replace:
PHP:
print preg_replace("#дмитрий#is","КУКУ!","Дмитрий");
пишет "Дмитрий", а должно "КУКУ!" =\

сразу перед preg_replace пишу:
PHP:
setlocale(LC_ALL,'ru_RU.UTF-8');
не помогает (
вместо UTF-8 пишу CP1251 тоже не помогает...UTF-8 пробовал по разному писать (маленькими,с черточкой, без и т.д.)
setlocale(LC_ALL,'ru_RU.UTF-8') возвращает true только когда именно ru_RU.UTF-8, решил так и оставить...


подскажите что еще может быть не так? сервер unix, есть возможность пересобрать/перенастроить php...

заранее спасибо!
---
Версия PHP: 5.2.8

Расширения PHP: session, Reflection, date, pcre, libxml, apache, bz2, ctype, SimpleXML, SPL, dom, filter, ftp, gd, hash, iconv, json, mcrypt, mssql, pdf, PDO, pdo_sqlite, posix, standard, sockets, SQLite, tokenizer, xml, xmlreader, xmlwriter, zip, zlib, snmp, mysql, curl, pdo_mysql, mbstring, Zend Optimizer

Веб сервер: Apache/1.3.41 (Unix) mod_perl/1.30 PHP/5.2.8

Configure Command: './configure' '--with-layout=GNU' '--with-config-file-scan-dir=/usr/local/etc/php' '--disable-all' '--enable-libxml' '--with-libxml-dir=/usr/local' '--with-pcre-regex=yes' '--enable-reflection' '--program-prefix=' '--enable-discard-path' '--enable-fastcgi' '--with-apxs=/usr/local/sbin/apxs' '--with-regex=php' '--with-zend-vm=CALL' '--enable-zend-multibyte' '--disable-ipv6' '--prefix=/usr/local' '--mandir=/usr/local/man' '--infodir=/usr/local/info/' '--build=i386-portbld-freebsd7.1'
 

jeno

Новичок
хм,выполнил по ssh "locale", получил:

LANG=ru_RU.KOI8-R
LC_CTYPE="ru_RU.KOI8-R"
LC_COLLATE="ru_RU.KOI8-R"
LC_TIME="ru_RU.KOI8-R"
LC_NUMERIC="ru_RU.KOI8-R"
LC_MONETARY="ru_RU.KOI8-R"
LC_MESSAGES="ru_RU.KOI8-R"
LC_ALL=
 

jeno

Новичок
% locale -a | grep -i ru
ru_RU.CP1251
ru_RU.CP866
ru_RU.ISO8859-5
ru_RU.KOI8-R
ru_RU.UTF-8
 

EugenVip

Новичок
помогите плиз с такой траблой:
$text = preg_replace("/\[url\](\S+?)\[\/url\]/ie".u,"1", $text);
на выходе получается что $text="" хотя на входе имеется значение. разработчики данного кода грешат на баг PHP.
Куда смотреть? Заранее благодарен.
 

zerkms

TDD infected
Команда форума
EugenVip
пусть разработчики и решают эти проблемы. ты в этом вопросе компетентен?
 

EugenVip

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

zerkms

TDD infected
Команда форума
EugenVip
если там и есть баг, то там баг PCRE, а не пхп. но я в это не верю.
99.9999% что ваши разработчики балбесы и вешают вам лапшу на уши.
 

EugenVip

Новичок
я тоже так думаю. вот исходная строка с объяснением разработчика:
$text = preg_replace("/\[url\](\S+?)\[\/url\]/ie".BX_UTF_PCRE_MODIFIER,"1", $text);
В данном случае по-видимому имеет место баг PHP: после выполнения функции preg_replace с модификатором BX_UTF_PCRE_MODIFIER (имеет значение 'u') переменная $text становится пустой.
 

zerkms

TDD infected
Команда форума
PHP:
$text = "asd [url qwe[/url] zxc";
$text = preg_replace("/\[url\](\S+?)\[\/url\]/ieu","1", $text);
var_dump($text); // string(9) "asd 1 zxc"
UPD: ёмаё, не могу сделать чтобы ... не превращался в урл, соотв. галочку убирал. так что вручную подставить недостающую закрывающую ] после url
 

EugenVip

Новичок
он самый..... :)

-~{}~ 23.09.09 10:35:

вот что мне ответила разработка, после того как я носом ткнул их в "ошибку" с .BX_UTF_PCRE_MODIFIER
мы локализовали проблему, ясно, что не работают регулярные выражения должным образом.
К сожалению, не можем точно назвать причину, Вам следует обращаться к соответствующим специалистам по настройке сервера.
Обращение вынуждены закрыть т.к. в данной ситуации ничего больше сделать не можем.
Что можете посоветовать, комрады?
Что настраивать в сервере можно/нужно?
 

baev

‹°°¬•
Команда форума
EugenVip, Вы то, что zerkms предложил, попробовали?
 
Сверху