Досить складно сказати, який варіант ЧПУ найбільш оптимальний для пошукових систем і наскільки це впливає на релевантність. В рамках даної статті я вирішив опустити дане питання і запропонувати вашій увазі готову php-функцію перекладу кирилиці (російської) в трансліт. яку я використовую в своїх проектах.
![Php функція перекладу в трансліт translit () (функція) Php функція перекладу в трансліт translit ()](https://images-on-off.com/images/144/phpfunktsiyaperevodavtranslittranslit-0e5ee645.jpg)
Нюанси перекладу в трансліт
Але перед тим як представити 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); // замінюємо "/" на "-"
Благослови Вас бог. Я мало не витратив купу часу.