X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Транслитерация урлов
Baphomets
Baphomets
Topic Starter сообщение 2.4.2020, 15:04; Ответить: Baphomets
Сообщение #1


Доброго дня. Существует проблема - необходимо выводить заголовки страниц объявлений с неизменным регистром букв. Однако они выводятся в нижнем регистре. В config.php есть код - не могу разобраться по причине отсутствия необх. знаний, может что надо поменять, чтобы урлы не меняли регистр и выводились как есть.

Напр. 47346-Kuplju-ugol-smolu-kationit-anionit-, а не 47346-kuplju-ugol-smolu-kationit-anionit-

function custom_translit($text){

        $trans = array('А' => 'a', 'Б' => 'b', 'В' => 'v', 'Г' => 'g', 'Д' => 'd',

                       'Е' => 'e', 'Ё' => 'jo', 'Ж' => 'zh', 'З' => 'z', 'И' => 'i',

                       'Й' => 'j', 'К' => 'k', 'Л' => 'l', 'М' => 'm', 'Н' => 'n',

                       'О' => 'o', 'П' => 'p', 'Р' => 'r', 'С' => 's', 'Т' => 't',

                       'У' => 'u', 'Ф' => 'f', 'Х' => 'h', 'Ц' => 'c', 'Ч' => 'ch',

                       'Ш' => 'sh', 'Щ' => 'shh', 'Ъ' => '', 'Ы' => 'y', 'Ь' => '',

                       'Э' => 'je', 'Ю' => 'ju', 'Я' => 'ja',

                   

                       'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',

                       'е' => 'e', 'ё' => 'jo', 'ж' => 'zh', 'з' => 'z', 'и' => 'i',

                       'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n',

                       'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't',

                       'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch',

                       'ш' => 'sh', 'щ' => 'shh', 'ъ' => '', 'ы' => 'y', 'ь' => '',

                       'э' => 'je', 'ю' => 'ju', 'я' => 'ja');

                       

        $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');   

        $text = strtr($text, $trans);

        $text = strtolower($text);

        $text = trim($text);

        $text = preg_replace('/[^a-z0-9-\.]/', '-', $text);

        $text = preg_replace('/-+/', "-", $text);   

        $text = preg_replace('/\.+/', ".", $text);   

        if(substr($text, 0, 1) == '-') $text = substr($text, 1);

        $last_letter = substr($text, -1);

        while($last_letter == '-' || $last_letter == '.'){

            $text = substr($text, 0, -1);

            $last_letter = substr($text, -1);

        }

        return $text;

}



Сообщение отредактировал TindrumGM - 2.4.2020, 15:05


--------------------
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MattCutts_mw
MattCutts_mw
сообщение 2.4.2020, 19:41; Ответить: MattCutts_mw
Сообщение #2


вот это треш )))
попробуй убрать $text = strtolower($text);
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Baphomets
Baphomets
Topic Starter сообщение 3.4.2020, 1:34; Ответить: Baphomets
Сообщение #3


(MattCutts @ 2.4.2020, 22:41) *
попробуй убрать $text = strtolower($text);
Убирал, ничего не меняется 


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MattCutts_mw
MattCutts_mw
сообщение 3.4.2020, 1:50; Ответить: MattCutts_mw
Сообщение #4


во первых дай образец текста, во вторых надо использовать мультибайтные функции
а во вторых, что ты хочешь:

'А' => 'a', 'Б' => 'b', 'В' => 'v', 'Г' => 'g', 'Д' => 'd',
'Е' => 'e', 'Ё' => 'jo', 'Ж' => 'zh', 'З' => 'z', 'И' => 'i',
'Й' => 'j', 'К' => 'k', 'Л' => 'l', 'М' => 'm', 'Н' => 'n',
'О' => 'o', 'П' => 'p', 'Р' => 'r', 'С' => 's', 'Т' => 't',
'У' => 'u', 'Ф' => 'f', 'Х' => 'h', 'Ц' => 'c', 'Ч' => 'ch',
'Ш' => 'sh', 'Щ' => 'shh', 'Ъ' => '', 'Ы' => 'y', 'Ь' => '',
'Э' => 'je', 'Ю' => 'ju', 'Я' => 'ja',


ты преобразуешь символы из верхнего регистра в нижний

надо 'А' => 'A',
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Baphomets
Baphomets
Topic Starter сообщение 3.4.2020, 4:47; Ответить: Baphomets
Сообщение #5


(MattCutts @ 3.4.2020, 04:50) *
ты преобразуешь символы из верхнего регистра в нижний


Я изменил схему  

 $trans = array('А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D',

'Е' => 'E', 'Ё' => 'Jo', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I',

'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N',

'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T',

'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Ch',

'Ш' => 'Sh', 'Щ' => 'Shh', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '',

'Э' => 'Je', 'Ю' => 'Ju', 'Я' => 'Ja',

 

Теперь если убрать $text = strtolower($text); - вырезается первая заглавная буква в адресе. Это доска объявлений, тексты - объявления. http://www.board-box.ru/messages/7446-post...s-sprinter.html

А если не убирать $text = strtolower($text); - всё выводится в нижнем регистре (ссылка выше). Мне надо как есть - с заглавными буквами, где они стоят


Сообщение отредактировал TindrumGM - 3.4.2020, 4:49


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MattCutts_mw
MattCutts_mw
сообщение 3.4.2020, 10:28; Ответить: MattCutts_mw
Сообщение #6


TindrumGM, врезается регулярными выражениями, можно без них обойтись, мне кажется, напиши, что должна делать функция?
или $text = preg_replace('/[^a-z0-9-\.]/', '-', $text); на $text = preg_replace('/[^a-zA-Z0-9-\.]/', '-', $text);
и все заработает

<?php
function custom_translit($text){
$trans = array('А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D',
'Е' => 'E', 'Ё' => 'Jo', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I',
'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N',
'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T',
'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Ch',
'Ш' => 'Sh', 'Щ' => 'Shh', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '',
'Э' => 'Je', 'Ю' => 'Ju', 'Я' => 'Ja',

'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
'е' => 'e', 'ё' => 'jo', 'ж' => 'zh', 'з' => 'z', 'и' => 'i',
'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n',
'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't',
'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch',
'ш' => 'sh', 'щ' => 'shh', 'ъ' => '', 'ы' => 'y', 'ь' => '',
'э' => 'je', 'ю' => 'ju', 'я' => 'ja');

$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
$text = strtr($text, $trans);
//$text = strtolower($text);
$text = trim($text);
$text = preg_replace('/[^a-zA-Z0-9-\.]/', '-', $text); //
$text = preg_replace('/-+/', "-", $text);
$text = preg_replace('/\.+/', ".", $text);
if(substr($text, 0, 1) == '-') $text = substr($text, 1);
$last_letter = substr($text, -1);
while($last_letter == '-' || $last_letter == '.'){
$text = substr($text, 0, -1);
$last_letter = substr($text, -1);
}
return $text;
}

echo custom_translit('Купить квартиру в Москве');
echo custom_translit('77 Купить квартиру в Москве');




Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


Сообщение отредактировал MattCutts - 3.4.2020, 10:34
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) ТОП-10 Яндекс, по примерно 40 млн слов, 400+ млн урлов.
Собрана 1-10 сентября 2019
3 mistral5 2730 21.9.2019, 21:12
автор: devvver


 



RSS Текстовая версия Сейчас: 16.4.2024, 12:51
Дизайн