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

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

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>, регулярные выражения и функции работы со строками перестают
воспринимать кириллицу как буквы.

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

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

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

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

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

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

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

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

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