0 Пользователей и 1 Гость просматривают эту тему.
  • 5 Ответов
  • 7942 Просмотров
*

westward

  • Новичок
  • 11
  • 4 / 0
Здравствуйте!

Выяснилось, что стандартный компонент поиска с включенным SEO, если слово или фраза содержат заглавную русскую "Р", работает неправильно. Из-за скромных познаний в теме пришлось долго и много копать - вначале стандартный плагин content - search, затем стандартный компонент поиска. Искал я место в программном коде, которое в строке utf-8 с кодами русской Р меняет D0 A0 на D0 20.
Докопался до нужного на мой взгляд места. В контроллере компонента com_search, функция search(), последняя строка кода - вызывается метод JRoute::_(). И вот в нем-то строка с заглавной Р и портится.

Файл \libraries\joomla\methods.php - реализация класса JRoute и метода JROUTE::_()

                // Replace spaces
                $url = preg_replace('/\s/', '%20', $url);

Переменная $url соответственно на входе и на выходе этой функции:
/component/search/КОРБАН.html?ordering=&searchphrase=all
/component/search/КО�%20БАН.html?ordering=&searchphrase=all

Насколько я понимаю, этот вызов preg_replace должен заменить любой пробельный символ на последовательность %20. Но почему заглавная русская Р засчитана как пробельный символ?

С уважением
*

smart

  • Администратор
  • 6485
  • 1317 / 15
  • Хочешь сделать хорошо — сделай!
Re: preg_replace() и заглавная русская Р
« Ответ #1 : 14.01.2009, 19:42:45 »
Я бы заменил строчку:

Код: php
$url = preg_replace('/\s/', '%20', $url);

на

Код: php
$url = preg_replace('/\s/u', '%20', $url);
*

westward

  • Новичок
  • 11
  • 4 / 0
Re: preg_replace() и заглавная русская Р
« Ответ #2 : 14.01.2009, 23:02:58 »
Да, так все работает верно. Спасибо огромное за ответ!

Есть на форуме место, куда стоило бы написать заметку? Или кому надо, сам найдет?

С уважением
*

smart

  • Администратор
  • 6485
  • 1317 / 15
  • Хочешь сделать хорошо — сделай!
Re: preg_replace() и заглавная русская Р
« Ответ #3 : 15.01.2009, 10:23:51 »
Мы добавим эту информацию в Joomla FAQ, и, конечно, я добавил описание этой ошибки и ее решения в bug-tracker Joomla, будем надеяться, что в следующей версии это будет уже исправлено.
*

westward

  • Новичок
  • 11
  • 4 / 0
Re: preg_replace() и заглавная русская Р
« Ответ #4 : 16.01.2009, 13:59:27 »
Для корректной работы стандартного компонента поиска Joomla нужно внести еще одно исправление.

Файл \components\com_search\views\search\view.html.php. Строка примерно 129-я.

Было так:
Код
{
  $searchwords = preg_split("/\s+/", $searchword);

А надо так:
Код
{
  $searchwords = preg_split("/\s+/u", $searchword);

Пропущен все тот же модификатор utf-8 в регулярном выражении.
*

smart

  • Администратор
  • 6485
  • 1317 / 15
  • Хочешь сделать хорошо — сделай!
Re: preg_replace() и заглавная русская Р
« Ответ #5 : 18.01.2009, 14:48:58 »
Ага, спасибо. Добавил и это исправление в баг-трекер Joomla 1.5. Будем надеяться оба пожелания учтут в следующей версии (по идее и в 1.6 это тоже должно включиться).
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться