Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как сделать ссылки на русском языке

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


     06.10.2012    кириллические ссылки    Все вопросы » Общие вопросы по PHP    9074

вопрос
в языковом файле меняю например 'ш' => '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

9 комментариев

alexey
Юзер

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

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

alexey
Юзер

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

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

alexey
Юзер

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

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

alexey
Юзер

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

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

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

ПафНутиЙ
Админ

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

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

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

alexey
Юзер

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

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

ПафНутиЙ
Админ

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

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

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

moondi
Юзер

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

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


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

dizykr
Юзер

dizykr - 30 марта 2021 18:03 -

Удаляете вконце или редактируите
С строки $langtranslit = array('

по );

вставляете ето для УКР сайтов
$langtranslit = array('а' => 'а', 'б' => 'б', 'в' => 'в', 'г' => 'г', 'д' => 'д', 'е' => 'e', 'є' => 'є', 'ж' => 'ж', 'з' => 'з', 'і' => 'і', 'й' => 'й', 'к' => 'к', 'л' => 'л', 'м' => 'м', 'н' => 'н', 'о' => 'о', 'п' => 'п', 'р' => 'р', 'с' => 'с', 'т' => 'т', 'у' => 'у', 'ф' => 'ф', 'х' => 'х', 'ц' => 'ц', 'ч' => 'ч', 'ш' => 'ш', 'щ' => 'щ', 'и' => 'и', 'ь' => 'ь', 'ї' => 'ї', 'ю' => 'ю', "я" => "я", " " => "-", 'А' => 'а', 'Б' => 'б', 'В' => 'в', 'Г' => 'г', 'Д' => 'д', 'Е' => 'е', 'Є' => 'є', 'Ж' => 'ж', 'З' => 'з', 'І' => 'і', 'Й' => 'й', 'К' => 'к', 'Л' => 'л', 'М' => 'м', 'Н' => 'н', 'О' => 'о', 'П' => 'п', 'Р' => 'р', 'С' => 'с', 'Т' => 'т', 'У' => 'у', 'Ф' => 'ф', 'Х' => 'х', 'Ц' => 'ц', 'Ч' => 'ч', 'Ш' => 'ш', 'Щ' => 'щ', 'И' => 'и', 'Ь' => 'ь', 'Ї' => 'ї', 'Ю' => 'ю', "Я" => "я", " " => "-", "À"=>"A", "à"=>"a", "Á"=>"A", "á"=>"a", "Â"=>"A", "â"=>"a", "Ä"=>"A", "ä"=>"a", "Ã"=>"A", "ã"=>"a", "Å"=>"A", "å"=>"a", "Æ"=>"AE", "æ"=>"ae", "Ç"=>"C", "ç"=>"c", "Ð"=>"D", "È"=>"E", "è"=>"e", "É"=>"E", "é"=>"e", "Ê"=>"E", "ê"=>"e", "Ì"=>"I", "ì"=>"i", "Í"=>"I", "í"=>"i", "Î"=>"I", "î"=>"i", "Ï"=>"I", "ï"=>"i", "Ñ"=>"N", "ñ"=>"n", "Ò"=>"O", "ò"=>"o", "Ó"=>"O", "ó"=>"o", "Ô"=>"O", "ô"=>"o", "Ö"=>"O", "ö"=>"o", "Õ"=>"O", "õ"=>"o", "Ø"=>"O", "ø"=>"o", "Œ"=>"OE", "œ"=>"oe", "Š"=>"S", "š"=>"s", "Ù"=>"U", "ù"=>"u", "Û"=>"U", "û"=>"u", "Ú"=>"U", "ú"=>"u", "Ü"=>"U", "ü"=>"u", "Ý"=>"Y", "ý"=>"y", "Ÿ"=>"Y", "ÿ"=>"y", "Ž"=>"Z", "ž"=>"z", "Þ"=>"B", "þ"=>"b", "ß"=>"ss", "£"=>"pf", "¥"=>"ien", "ð"=>"eth", "ѓ"=>"r");


работает так англ b переводит в б и большие тоже надо обозначить или же та 'а' => 'а', 'А' => 'а'

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

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

наверх