Главная > PHP > php: перевод текста в транслит и UTF-8

php: перевод текста в транслит и UTF-8

Раньше пользовался функцией:

function GetInTranslit($string) {
	$string=strtr($string,"абвгдеёзийклмнопрстуфхцыэАБВГДЕЁЗИЙКЛМНОПРСТУФХЦЫЭ","abvgdeeziyklmnoprstufhcieABVGDEEZIKLMNOPRSTUFHCIE");
	$string=strtr($string, array(
		"ж"=>"zh", " "=>"-", "ч"=>"ch", "ш"=>"sh",
		"щ"=>"shch", "ь"=>"", "ъ"=>"", "ю"=>"yu", "я"=>"ya",
		"Ж"=>"Zh", "Ч"=>"Ch", "Ш"=>"Sh",
		"Щ"=>"Shch", "Ь"=>"", "Ъ"=>"", "Ю"=>"Yu", "Я"=>"Ya",
		"і"=>"i", "І"=>"I", "ї"=>"yi", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye")
	);
return $string;
}

но, когда текст в UTF-8 выходят крокозяблы. :( Правильный вариант:

function GetInTranslit($string) {
	$replace=array(
		"'"=>"",
		"`"=>"",
		"а"=>"a","А"=>"a",
		"б"=>"b","Б"=>"b",
		"в"=>"v","В"=>"v",
		"г"=>"g","Г"=>"g",
		"д"=>"d","Д"=>"d",
		"е"=>"e","Е"=>"e",
		"ж"=>"zh","Ж"=>"zh",
		"з"=>"z","З"=>"z",
		"и"=>"i","И"=>"i",
		"й"=>"y","Й"=>"y",
		"к"=>"k","К"=>"k",
		"л"=>"l","Л"=>"l",
		"м"=>"m","М"=>"m",
		"н"=>"n","Н"=>"n",
		"о"=>"o","О"=>"o",
		"п"=>"p","П"=>"p",
		"р"=>"r","Р"=>"r",
		"с"=>"s","С"=>"s",
		"т"=>"t","Т"=>"t",
		"у"=>"u","У"=>"u",
		"ф"=>"f","Ф"=>"f",
		"х"=>"h","Х"=>"h",
		"ц"=>"c","Ц"=>"c",
		"ч"=>"ch","Ч"=>"ch",
		"ш"=>"sh","Ш"=>"sh",
		"щ"=>"sch","Щ"=>"sch",
		"ъ"=>"","Ъ"=>"",
		"ы"=>"y","Ы"=>"y",
		"ь"=>"","Ь"=>"",
		"э"=>"e","Э"=>"e",
		"ю"=>"yu","Ю"=>"yu",
		"я"=>"ya","Я"=>"ya",
		"і"=>"i","І"=>"i",
		"ї"=>"yi","Ї"=>"yi",
		"є"=>"e","Є"=>"e"
	);
	return $str=iconv("UTF-8","UTF-8//IGNORE",strtr($string,$replace));
}

на основе http://sono-design.ru/blog/programming/translit-v-utf-8#

Добавлено 19.01.2017
Оптимально для формирования ЧПУ:

function translit($str){
	$translit=array(
		"А"=>"a","Б"=>"b","В"=>"v","Г"=>"g","Д"=>"d","Е"=>"e","Ё"=>"e","Ж"=>"zh","З"=>"z","И"=>"i","Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n","О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t","У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch","Ш"=>"sh","Щ"=>"shch","Ъ"=>"","Ы"=>"y","Ь"=>"","Э"=>"e","Ю"=>"yu","Я"=>"ya",
		"а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"e","ж"=>"zh","з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"shch","ъ"=>"","ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
		"A"=>"a","B"=>"b","C"=>"c","D"=>"d","E"=>"e","F"=>"f","G"=>"g","H"=>"h","I"=>"i","J"=>"j","K"=>"k","L"=>"l","M"=>"m","N"=>"n","O"=>"o","P"=>"p","Q"=>"q","R"=>"r","S"=>"s","T"=>"t","U"=>"u","V"=>"v","W"=>"w","X"=>"x","Y"=>"y","Z"=>"z"
	);
	$result=strtr($str,$translit);
	$result=preg_replace("/[^a-zA-Z0-9_]/i","-",$result);
	$result=preg_replace("/\-+/i","-",$result);
	$result=preg_replace("/(^\-)|(\-$)/i","",$result);
	return $result;
}
Categories: PHP Tags:
  1. Yuklov
    1 ноября,2017 в 14:14 | #1

    У меня есть вордпресс плагин-транслитератор, который работает с функцией $replace = array и return strtr($text,self::$replace). Не могу добавлят эти функции:
    1. Как делать чтобы в начале слова (или строки) букву «Е» транслитерировать как «Ye», в остальных случаях «E»?
    2. Если все буквы слова вверхном регистре, Ш должен транслитерировать как SH, а не Sh.

    Если кто-нибудь знает, помогите пожалуйста.

  2. Аноним
    19 января,2017 в 00:50 | #2

    Николай :
    » «=>»_», предлагаю добавить
    Спасибо.

  3. Николай
    14 декабря,2016 в 17:27 | #3

    » «=>»_», предлагаю добавить
    Спасибо.

  4. manowar166
    27 ноября,2016 в 18:32 | #4

    Спасибо , большое )))

  5. Юрий
    30 июля,2016 в 20:02 | #5

    СПАСИБО ОГРОМНОЕ

  6. Сергей
    29 июня,2016 в 15:46 | #6
    function slugify($string) {
        $string = transliterator_transliterate("Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();", $string);
        $string = preg_replace('/[-\s]+/', '-', $string);
        return trim($string, '-');
    }
     
    echo slugify("Я люблю PHP!");
  7. Аноним
    30 декабря,2015 в 21:03 | #7

    Помогло! Спасибо за выкладку…

  8. Аноним
    22 мая,2015 в 00:03 | #8

    @Ярослав
    Стихами почти )

  9. Ярослав
    14 ноября,2014 в 15:19 | #9

    Ты просто бог!
    спасибо, очень помог!

  10. bookletpro
    22 апреля,2014 в 11:20 | #10

    Спасибо, дружище! Очень выручил

  11. Sebastian
    18 марта,2013 в 16:18 | #11

    Спасибо чувааак)))

  12. EUGEN
    2 марта,2013 в 19:06 | #12

    Спасибо, помогло. Но не думаю, что заменять буквы «Е» и «Э» одной буквой (Е) — хорошая идея. Я в таких случаях пользуюсь ГОСТовской таблицей транслитерации: http://bydlokoder.ru/index.php?p=article9

  13. Incognito Nongrata
    11 января,2013 в 22:35 | #13

    Спасибо.

  14. Аноним
    17 декабря,2012 в 13:54 | #14

    Спасибо

Похожие публикации