Php функція перекладу в трансліт translit ()

Досить складно сказати, який варіант ЧПУ найбільш оптимальний для пошукових систем і наскільки це впливає на релевантність. В рамках даної статті я вирішив опустити дане питання і запропонувати вашій увазі готову php-функцію перекладу кирилиці (російської) в трансліт. яку я використовую в своїх проектах.

Php функція перекладу в трансліт translit ()

Нюанси перекладу в трансліт

Але перед тим як представити php-код самої функції, нам знадобиться уточнити пару моментів. Почнемо з того, що запропонований варіант заснований на використанні масиву перекладу функцією strtr (). Таким чином, частково вирішується проблема з кодуванням, але набір кириличних (російських) букв залежимо від кодування файлу, де буде розташована функція.

Наступний момент пов'язаний з переданої функції рядком. Цей рядок може складатися з символів різного регістру, містити HTML-код і повторюють прогалини і т.д. Очевидно, що для перетворення в повноцінний ЧПУ знадобиться провести додаткову фільтрацію рядки, а прогалини замінити, на той же символ «мінус» (-).

PHP-функція translit ()

Все вище сказане, по крайней мере, в спрощеному вигляді, реалізовано в використовуваної мною функції перекладу в трансліт, ось її php-код:

function translit ($ s) $ s = (string) $ s; // перетворимо в строкове значення
$ S = strip_tags ($ s); // прибираємо HTML-теги
$ S = str_replace (array ( "\ n", "\ r"), "", $ s); // прибираємо переклад каретки
$ S = preg_replace ( "/ \ s + /", '', $ s); // видаляємо повторюють прогалини
$ S = trim ($ s); // прибираємо прогалини на початку і кінці рядка
$ S = function_exists ( 'mb_strtolower'). mb_strtolower ($ s). strtolower ($ s); // переводимо рядок в нижній регістр (іноді треба задати локаль)
$ S = strtr ($ s, array ( 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' = > 'd', 'е' => 'e', ​​'е' => 'e', ​​'ж' => 'j', 'з' => 'z', 'і' => 'i', 'ї' => 'y', 'до' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'про' => 'o', 'п' => 'p', 'р' => 'r', 'з' => 's', 'т' => 't', 'у' => 'u', ' ф '=>' f ',' х '=>' h ',' ц '=>' c ',' ч '=>' ch ',' ш '=>' sh ',' щ '=>' shch ',' и '=>' y ',' е '=>' e ',' ю '=>' yu ',' я '=>' ya ',' ь '=>' ',' ь ' => ''));
$ S = preg_replace ( "/ [^ 0-9a-z-_] / i", "", $ s); // очищаємо рядок від неприпустимих символів
$ S = str_replace ( "", "-", $ s); // замінюємо прогалини знаком мінус
return $ s; // повертаємо результат
>

Коротко про транслітерації

Процес транслітерації має масу особливостей. У своїй статті я зупинився саме на перекладі кирилиці в трансліт, тобто російський текст набраний латинськими буквами. Запропонований варіант php-функції, заточений під створення ЧПУ, яке нормально сприймається пошуковими системами Google і Яндекс. В принципі, translit () я використовую як одну з функцій набору фільтрів, що дозволяє автоматизувати сам процес обробки даних, але це зовсім інша історія.

Ну, і тому ми заговорили про ЧПУ, слід також сказати і про повноцінний перекладі. Очевидно, що реалізація такого варіанту власними силами не буде простою, а значить більш правильно буде скористатися стороннім сервісом, наприклад, Google перекладачем. Якщо дана тема Вам цікава, рекомендую ознайомитися з моєю PHP-функцією багатомовного перекладу gtranslate ().

На цьому у мене все. Дякуємо за увагу. Успіхів!

По-моєму це дуже недопрацьована транслітерація, застосовувати десь на практиці її буде складно. Слово "об'єктив" у вас буде "obektiv", без вказівки пом'якшення букви "б". Нормальні транслітератор роблять "ob'ektiv" або "objektiv"

@ Plutov.by: наведений приклад транслітерації заточений під ЧПУ, а в ньому символ одинарної лапки не допустимо, а точніше викличе додаткові проблеми.

Тоді беру свої слова назад, пропустив ЧПУ, це все понеділок :)

@ Plutov.by: ні, в принципі, логічно, але неможливо врахувати всі варіанти, а транслит зазвичай використовують саме під ЧПУ. -)

рядок
$ S = preg_replace ( "/ \ s + /", '', $ s); // видаляємо повторюють прогалини
треба ставити після
$ S = preg_replace ( "/ [^ 0-9a-z-_] / i", "", $ s); // очищаємо рядок від неприпустимих символів

так як після видалення неприпустимих символів виникають подвійні, потрійні і т.д. прогалини

а в цілому хороша функція вийшла, вичищає різне сміття і робить все красиво! ;-)

Велике спасибі. частина вашого коду мені дуже допомогла.

А як вивести результат в змінну $ result або щось подібне -?

2Олег так функція повертає значення, т. Е. Його можна привласнити змінної:

$ Result = translit ( 'функція перекладу в трансліт');

або вивести на екран:

echo translit ( 'функція перекладу в трансліт');

спасибі за підказку

Щоб не ставити локаль для strtolower ($ s), можна додати відповідності для великих літер в array () і потім вже переводити в нижній регістрр

2Алексей Можна, але це значно збільшить розмір масиву.

А можу я цю функцію вставити в обробник форми, щоб він в рядок додаткову заганяв транслитом?

Я так робив для своїх CMSок, що ЧПУ генерувати.

Я б ще додав 'UTF-8' в рядок mb_strtolower ($ s, 'UTF-8'). strtolower ($ s, 'UTF-8');

Дякуємо. Відмінна функція. Дуууже допомогла!

Варто ще замінити "/" на "-"
$ S = preg_replace ( "/ \ //", '-', $ s); // замінюємо "/" на "-"

Благослови Вас бог. Я мало не витратив купу часу.

Схожі статті