LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
04.02.2012, 10:11:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: preg_replace() и заглавная русская Р  (Прочитано 4413 раз)
0 Пользователей и 1 Гость смотрят эту тему.
westward
Захожу иногда
**

Репутация: +4/-0
Offline Offline

Сообщений: 14


« : 14.01.2009, 19:46:25 »

Здравствуйте!

Выяснилось, что стандартный компонент поиска с включенным 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
Администратор
*******

Репутация: +1077/-14
Offline Offline

Пол: Мужской
Сообщений: 8292


тружусь даже во сне...


« Ответ #1 : 14.01.2009, 20:42:45 »

Я бы заменил строчку:

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

на

Код
$url = preg_replace('/\s/u', '%20', $url);
Записан
westward
Захожу иногда
**

Репутация: +4/-0
Offline Offline

Сообщений: 14


« Ответ #2 : 15.01.2009, 00:02:58 »

Да, так все работает верно. Спасибо огромное за ответ!

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

С уважением
Записан
smart
Администратор
*******

Репутация: +1077/-14
Offline Offline

Пол: Мужской
Сообщений: 8292


тружусь даже во сне...


« Ответ #3 : 15.01.2009, 11:23:51 »

Мы добавим эту информацию в Joomla FAQ, и, конечно, я добавил описание этой ошибки и ее решения в bug-tracker Joomla, будем надеяться, что в следующей версии это будет уже исправлено.
Записан
westward
Захожу иногда
**

Репутация: +4/-0
Offline Offline

Сообщений: 14


« Ответ #4 : 16.01.2009, 14: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
Администратор
*******

Репутация: +1077/-14
Offline Offline

Пол: Мужской
Сообщений: 8292


тружусь даже во сне...


« Ответ #5 : 18.01.2009, 15:48:58 »

Ага, спасибо. Добавил и это исправление в баг-трекер Joomla 1.5. Будем надеяться оба пожелания учтут в следующей версии (по идее и в 1.6 это тоже должно включиться).
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet