Использование xslt_process и <xsl:sort> нарушает работу регулярных выражений ?

Blindman

Новичок
Использование xslt_process и <xsl:sort> нарушает работу регулярных выражений ?

Windows XP, Apache 1.3.28, PHP 4.3.4

Имеется скрипт, содержащий такой кусок кода
PHP:
$search=array('~\:\s*(романы?|рассказы?)~i','~\(.+\)~U','~-\s+\d+\s*с\.~U','~\W+~');
$replace=array('',' ','',' ');
$row['title1']=trim(strtolower(preg_replace($search,$replace,$row['title'])));
Также в этом скрипте вызывается xslt_process

После добавления в XSL-шаблон тэга <xsl:sort select="price" data-type="number"/> перестают
работать регулярные выражения:

$row['title'] содержит
"Биология - 9(8) класс: Человек: Практикум по гигиене для факультативных занятий учащихся 9 класса - 96 с."
В $row['title1'] ожидаю получить
"биология 9 класс человек практикум по гигиене для факультативных занятий учащихся 9 класса"
получаю
"9 9"

Причем после удаления из шаблона тэгов <xsl:sort> этот эффект остается до перезапуска Apache

Кто-нибудь сталкивался с чем-то подобным?

-~{}~ 07.02.04 16:43:

В общем случае после вызова xslt_process с шаблоном, содержащим
<xsl:sort>, регулярные выражения и функции работы со строками перестают
воспринимать кириллицу как буквы.

Кто-то может посоветовать как это исправить ?
 

slach

Новичок
хммм... LOCALE SETTINGS сбивается чтоли... странный весьма баг... скорее всего бага не в PHP а именно в реализации xsl:sort в саблотроне...

под Linux тестировал ???

почему оно пересекается... мне понять сложно =)
сырцы саблотрона надо копать...
 

Blindman

Новичок
под Linux пока не тестировал

под Windows проблема решилась вызовом
setlocale(LC_COLLATE,"Russian_Russia.1251");
после xslt_process

хотя насколько я понимаю, саблотрон не должен бы влиять на локаль ? :confused:
 

slach

Новичок
это у тебя win32 только решение, советвую потеститься под Linux ;) есть маза, что там regexp вообще русские понимать в принципе не будут =)

почему это не должен, ты в sablotron прописываешь
encoding, а потом вызываешь СОРТИРОВКУ xsl:sort

на месте разработчиков, информацию о ПОРЯДКЕ сортировки я бы брал именно из LOCALE SETTINGS ;)
другое дело, зачем они не поставили locale обратно или почему она вообще сбрасывается ...
 

Blindman

Новичок
Под Linux протестировать сейчас нет возможности. Но русские буквы для regexp там не проблема.

Насколько я понял из беглого просмотра исходников саблотрона, после сортировки вызывается setlocale(LC_ALL, "C") , возможно это и является источником проблемы?

Будет время - пересоберу PHP и потестю под Linux
 
Сверху