Как сделать транслитерацию русских букв в URL? Движок articlems 2.2.2

Omnibus

Новичок
Как сделать транслитерацию русских букв в URL? Движок articlems 2.2.2

Привет всем!

Целый день гуглю и экспериментирую, пока не нашел решения. Вопрос такой - поставил новую версию движка http://articlems.com/download/. Все отлично работает, только проблема в том, что в адресе статьи русские буквы не транслитерируются должным образом. Например, у статьи заголовок "Классическая бижутерия" и хотелось бы, чтобы адрес статьи был такого вида:

site.ru/category/klassicheskaya-bizhuteria.html

В файле /code/core.php я нашел код, отвечающий за транслитерацию. По умолчанию он такой:

Код:
    /**
     * Generate an Url from the title (replacing spaces with '-' etc)
     *
     * @param string $title
     * @return string url
	*/
    function generateUrl($title){

        $title = trim($title);
        $title = str_replace(',',' ',$title);
        $title = str_replace('\'','',$title);
        $title = str_replace('(',' ',$title);
        $title = str_replace(')',' ',$title);
        $title = str_replace('?','',$title);
        $title = str_replace('!','',$title);
        $title = str_replace('`','',$title);
        $title = str_replace(' : ','-',$title);
        $title = str_replace(': ','-',$title);
        $title = str_replace(' :','-',$title);
        $title = str_replace(':','-',$title);
        $title = str_replace('’','',$title);
        $title = str_replace('"','',$title);
        $title = str_replace('“','',$title);
        $title = str_replace('“','',$title);
        $title = str_replace('“','',$title);
        $title = str_replace('”','',$title);
        $title = str_replace('”','',$title);
        $title = str_replace('—','-',$title);
        $title = str_replace('’','',$title);
        $title = str_replace('–','-',$title);

        $title = str_replace('ГЄ','e',$title);
        $title = str_replace('Г«','e',$title);

        $title = str_replace('Г‰','e',$title);
        $title = str_replace('Г‹','e',$title);
        $title = str_replace('ГЉ','e',$title);
        $title = str_replace('Г©','e',$title);
        $title = str_replace('ГЁ','e',$title);

        $title = str_replace('Е’','c',$title);
        $title = str_replace('Е“','c',$title);

        $title = str_replace('Гў','a',$title);
        $title = str_replace('Г¤','a',$title);
        $title = str_replace('ГЎ','a',$title);
        $title = str_replace('ГЈ','a',$title);
        $title = str_replace('ГҐ','a',$title);
        $title = str_replace('Г¦','a',$title);
        $title = str_replace('ГЂ','a',$title);

        $title = str_replace('Г®','i',$title);
        $title = str_replace('ГЇ','i',$title);
        $title = str_replace('Г¬','i',$title);
        $title = str_replace('Г_','i',$title);
        $title = str_replace('Г®','i',$title);
        $title = str_replace('ГЇ','i',$title);

        $title = str_replace('Г–','o',$title);
        $title = str_replace('Гґ','o',$title);
        $title = str_replace('Г¶','o',$title);
        $title = str_replace('ГІ','o',$title);
        $title = str_replace('Гі','o',$title);
        $title = str_replace('Гµ','o',$title);
        $title = str_replace('Г°','o',$title);

        $title = str_replace('Г»','u',$title);
        $title = str_replace('Гј','u',$title);
        $title = str_replace('Г№','u',$title);
        $title = str_replace('Гє','u',$title);

        $title = str_replace('Г§','c',$title);
        $title = str_replace('Г‡','c',$title);

        $title = str_replace('Гћ','p',$title);
        $title = str_replace('Г±','n',$title);
        $title = str_replace('ГЅ','y',$title);
        $title = str_replace('Гѕ','p',$title);
        $title = str_replace('Гї','y',$title);
        $title = str_replace('Гї','y',$title);
        $title = str_replace('Гђ','d',$title);
        $title = str_replace('Вї',' ',$title);

        $title = str_replace('&',' and ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('....',' ',$title);
        $title = str_replace('...',' ',$title);
        $title = str_replace('..',' ',$title);
        $title = str_replace('…',' ',$title);
        $title = str_replace(' - ',' ',$title);
        $title = str_replace('--',' ',$title);

        $title = str_replace('/',' ',$title);
        $title = str_replace('\\',' ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('  ',' ',$title);

        $title = trim($title);
        if (substr($title, -1,1) == '.'){
            $title = substr($title, 0, strlen($title)-1);
        }

        $title = trim($title);
        return $this->customurlencode($title);

    }
Адреса страниц с таким кодом получаются такого вида:

site.ru/category/Классическая-бижутерия.html

Если ссылку скопировать и вставить куда-либо (либо начать редактировать статью), то получается такой вариант:

site.ru/category/%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F-%D0%B1%D0%B8%D0%B6%D1%83%D1%82%D0%B5%D1%80%D0%B8%D1%8F.html

Я заменил код генерации ссылки на код, который в предыдущей версии этого движка 1.3 работал корректно. Но это не дало результатов.

Код:
 function generateUrl($title){
        $title = trim($title);
        $title = str_replace(',',' ',$title);
        $title = str_replace('\'','',$title);
        $title = str_replace('(',' ',$title);
        $title = str_replace(')',' ',$title);
        $title = str_replace('?','',$title);
        $title = str_replace('!','',$title);
        $title = str_replace('`','',$title);
        $title = str_replace(' : ','-',$title);
        $title = str_replace(': ','-',$title);
        $title = str_replace(' :','-',$title);
        $title = str_replace(':','-',$title);
        $title = str_replace('’','',$title);
        $title = str_replace('"','',$title);
        $title = str_replace('“','',$title);
        $title = str_replace('“','',$title);
        $title = str_replace('“','',$title);
        $title = str_replace('”','',$title);
        $title = str_replace('”','',$title);
        $title = str_replace('—','-',$title);
        $title = str_replace('–','-',$title);


        $title = str_replace('А','A',$title);
        $title = str_replace('а','a',$title);
        $title = str_replace('Б','B',$title);
        $title = str_replace('б','b',$title);
        $title = str_replace('В','V',$title);
        $title = str_replace('в','v',$title);
        $title = str_replace('Г','G',$title);
        $title = str_replace('г','g',$title);
        $title = str_replace('Д','D',$title);
        $title = str_replace('д','d',$title);
        $title = str_replace('Е','E',$title);
        $title = str_replace('е','e',$title);
        $title = str_replace('Ё','E',$title);
        $title = str_replace('ё','e',$title);
        $title = str_replace('Ж','Zh',$title);
        $title = str_replace('ж','zh',$title);
        $title = str_replace('З','Z',$title);
        $title = str_replace('з','z',$title);
        $title = str_replace('И','I',$title);
        $title = str_replace('и','i',$title);
        $title = str_replace('Й','I',$title);
        $title = str_replace('й','i',$title);
        $title = str_replace('К','K',$title);
        $title = str_replace('к','k',$title);
        $title = str_replace('Л','L',$title);
        $title = str_replace('л','l',$title);
        $title = str_replace('М','M',$title);
        $title = str_replace('м','m',$title);
        $title = str_replace('Н','N',$title);
        $title = str_replace('н','n',$title);
        $title = str_replace('О','O',$title);
        $title = str_replace('о','o',$title);
        $title = str_replace('П','P',$title);
        $title = str_replace('п','p',$title);
        $title = str_replace('Р','R',$title);
        $title = str_replace('р','r',$title);
        $title = str_replace('С','S',$title);
        $title = str_replace('с','s',$title);
        $title = str_replace('Т','T',$title);
        $title = str_replace('т','t',$title);
        $title = str_replace('У','U',$title);
        $title = str_replace('у','u',$title);
        $title = str_replace('Ф','F',$title);
        $title = str_replace('ф','f',$title);
        $title = str_replace('Х','H',$title);
        $title = str_replace('х','h',$title);
        $title = str_replace('Ц','Ts',$title);
        $title = str_replace('ц','ts',$title);
        $title = str_replace('Ч','Ch',$title);
        $title = str_replace('ч','ch',$title);
        $title = str_replace('Ш','Sh',$title);
        $title = str_replace('ш','sh',$title);
        $title = str_replace('Щ','Sh',$title);
        $title = str_replace('щ','sh',$title);
        $title = str_replace('Ь','',$title);
        $title = str_replace('ь','',$title);
        $title = str_replace('Ъ','',$title);
        $title = str_replace('ъ','',$title);
        $title = str_replace('Э','E',$title);
        $title = str_replace('э','e',$title);
        $title = str_replace('Ю','Yu',$title);
        $title = str_replace('ю','yu',$title);
        $title = str_replace('Я','Ya',$title);
        $title = str_replace('я','ya',$title);

        $title = str_replace('&',' and ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('....',' ',$title);
        $title = str_replace('...',' ',$title);
        $title = str_replace('..',' ',$title);
        $title = str_replace('…',' ',$title);
        $title = str_replace(' - ',' ',$title);
        $title = str_replace('--',' ',$title);

        $title = str_replace('/',' ',$title);
        $title = str_replace('\\',' ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('  ',' ',$title);
        $title = str_replace('  ',' ',$title);

        $title = trim($title);

        if (substr($title, -1,1) == '.'){
            $title = substr($title, 0, strlen($title)-1);
        }

        $title = trim($title);
        return $this->customurlencode($title);
    }
Адреса ссылок стали получаться такими:

site.ru/category/r%9Ar%BBr%B0s%81s%81res%87r%B5s%81r%BAr%B0s%8F-r%B1rer%B6s%83s%82r%B5s%80res%8F.html

Затем я попробовал сделать код для создания "красивых" урлов таким:

Код:
function generateUrl($title){
        $title = trim($title);
	$title = strtr($title, "ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёйцукенгшщзхъфывапролджэячсмитьбю", "eycukenghhzxyfivaproldjezcsmitibueycukenghhzxyfivaproldjezcsmitibu");
	$title = preg_replace('/[^a-zA-Z0-9]/si', '', $title);

        $title = trim($title);

        if (substr($title, -1,1) == '.'){
            $title = substr($title, 0, strlen($title)-1);
        }

        $title = trim($title);
        return $this->customurlencode($title);
    }
Это тоже не принесло результата - ссылки стали такого вида:

site.ru/category/rrrssresrsrrsrrerssrsres3.html

Скажите, пожалуйста, как можно сделать код таким, чтобы ссылки получались такого вида:

site.ru/category/klassicheskaya-bizhuteria.html

Заранее большое спасибо.
 

Вурдалак

Продвинутый новичок
Нет смысла сюда постить такие огромные куски кода. Можно было сократить, дав понять, что там одни str_replace(), либо скопировать куда-нибудь на http://pastebin.com/

-~{}~ 16.10.10 18:25:

В какой кодировке $title?
 

iceman

говнокодер
Omnibus
ты не на будущее учти, а сейчас отредактируй...
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Эммм, а разве str_replace нельзя скорпить массивы с соответствиями русский-английский?
 

newARTix

Новичок
$title = str_replace(' ',' ',$title);
$title = str_replace(' ',' ',$title);
$title = str_replace(' ',' ',$title);
$title = str_replace(' ',' ',$title);
$title = str_replace('....',' ',$title);
$title = str_replace('...',' ',$title);
$title = str_replace('..',' ',$title);


жесть... Срочно, выкинь этот "движок", пока не потратил на него слишком много времени, и возьми что-то более если не адекватное, то хотя бы популярное.
 

Omnibus

Новичок
Вурдалак,
спасибо.

iceman, попробовал отредактировать - вышло сообщение:
Администратор установил, что отредактировать сообщение можно только в течении 1440 минут после его публикации. Этот лимит времени прошел.

c0dex, я так и хотел, но что-то не срабатывает :)

newARTix, пока временно поставлю его, ArticleMS для каталога статей очень удобен. В будущем, когда подучу PHP, напишу свой.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Если "что-то не срабатывает", надо дебажить, пока не заработает.
 
Сверху