Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Как сделать ссылки на русском языке

Как сделать ссылки на русском языке


     06.10.2012    Общие вопросы по PHP    4929

вопрос
в языковом файле меняю например 'ш' => 'sh' НА 'ш' => 'ш', но ссылка отображается некорректно.Что и где еще надо исправить? Как сделать чтоб ссылки отображались правильно? То есть moy-sait.ru/категория/новость/ то сть по-русски?

Спасибо

Ответил: alexey


в engine\inc\include\functions.inc.php
и
engine\modules\functions.php
заменить [^a-z0-9\_\-] в нескольких местах
на
[^(\w)|(\x7F-\xFF)|(0-9)|(\_\-.)]

В некоторых записях точка отсутствует, соответственно последнее выражение будет будет без точки
(\_\-)
теперь получаем правильно написанную ссылку новости, например: "проба-номер-один-21"

В дополнение: функциональность проверялась на версии движка UTF-8, с исправленными правилами транслитерации в языковых файлах:
language\Russian\website.lng
language\Russian\adminpanel.lng

Комментарии пользователей (8)

alexey
1

8 | 8

alexey - 6 октября 2012 19:47 - Юзер

спасибо Сандер, но у меня стоит версия UTF-8. Если я в поле "ЧПУ URL статьи" вбиваю например: "проба", то после сохранения она превращается в "proba", а надо бы по-русски: "проба", то есть что бы движок не проводил на латынь

alexey
1

8 | 8

alexey - 6 октября 2012 22:03 - Юзер

хотя нет, сейчас исправил также транслитерацию в adminpanel.lng, после сохранения "проба", знаки в ссылке вообще пропадают, остается только номер новости с тире. То есть функция не обрабатывает русские буквы.

alexey
1

8 | 8

alexey - 6 октября 2012 22:06 - Юзер

в engine\inc\include\functions.inc.php
и
engine\modules\functions.php
заменить [^a-z0-9\_\-] в нескольких местах
на
[^(\w)|(\x7F-\xFF)|(\s)]
Ссылки по-крайней мере теперь по-русски, но там надо допроверить, всё ли корректно работает

alexey
1

8 | 8

alexey - 6 октября 2012 22:36 - Юзер

есть ошибка: знаки пробела стираются, а не заменяются на "тире", таким образом ссылка "проба номер один" превращается в "пробаномеродин" . За это отвечает (/s), который означает пробел, нижнее подеркивание и цифры
Надо исправить на:
(\w)|(\x7F-\xFF)|(0-9)|(\_\-.)
теперь получаем "проба-номер-один-21"

В некоторых записях точка отсутствует, соответственно последнее выражение будет будет без точки
(\_\-)

ПафНутиЙ
1064

3393 | 2433

ПафНутиЙ - 7 октября 2012 08:48 - Админ

Теперь офрмите в виде ответа. Те, кто захочет сделать так же как вы - будут руководствоваться.

Каков вопрос - таков и ответ. Просто помните об этом.

alexey
1

8 | 8

alexey - 7 октября 2012 15:06 - Юзер

я или не могу сам себе отвечать или ещё что-то, но формы "Ответить" я не вижу. Со зрением вроде всё в порядке ))

ПафНутиЙ
1064

3393 | 2433

ПафНутиЙ - 7 октября 2012 22:03 - Админ

потому что ответ на тот момент уже был.

Каков вопрос - таков и ответ. Просто помните об этом.

moondi
2

moondi - 20 января 2015 22:04 - Юзер

Цитата: alexey
[^(\w)|(\x7F-\xFF)|(0-9)|(\_\-.)]


А что именно вы писали в файлы
language\Russian\website.lng
language\Russian\adminpanel.lng
?

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы