Deerua about Coding -> Заметки с тегом «encoding»

Блог о кодинге, автор Deerua

coding, javascript, css, html, php, jquery, mysql, deerua

Deerua about Coding

 Избранное

 Самые комментируемые за всю историю

 198 заметок ненаглядно

 Архив за 2010, 2009, 2008  год


 12 марта 2009, 05:08       более года назад

Конвертация кириличной строки (Cyrillic UTF8) в транслит  

Это обновлённый вариант
function Transliterate($string){
  $cyr=array(
     "Щ", "Ш", "Ч","Ц", "Ю", "Я", "Ж","А","Б","В",
     "Г","Д","Е","Ё","З","И","Й","К","Л","М","Н",
     "О","П","Р","С","Т","У","Ф","Х","Ь","Ы","Ъ",
     "Э","Є", "Ї","І",
     "щ", "ш", "ч","ц", "ю", "я", "ж","а","б","в",
     "г","д","е","ё","з","и","й","к","л","м","н",
     "о","п","р","с","т","у","ф","х","ь","ы","ъ",
     "э","є", "ї","і"
  );
  $lat=array(
     "Shch","Sh","Ch","C","Yu","Ya","J","A","B","V",
     "G","D","e","e","Z","I","y","K","L","M","N",
     "O","P","R","S","T","U","F","H","", 
     "Y","" ,"E","E","Yi","I",
     "shch","sh","ch","c","Yu","Ya","j","a","b","v",
     "g","d","e","e","z","i","y","k","l","m","n",
     "o","p","r","s","t","u","f","h",
     "", "y","" ,"e","e","yi","i"
  );
  for($i=0; $i<count($cyr); $i++)  {
     $c_cyr = $cyr[$i];
     $c_lat = $lat[$i];
     $string = str_replace($c_cyr, $c_lat, $string);
  }
  $string = 
  	preg_replace(
  		"/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]e/", 
  		"\${1}e", $string);
  $string = 
  	preg_replace(
  		"/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]/", 
  		"\${1}'", $string);
  $string = preg_replace("/([eyuioaEYUIOA]+)[Kk]h/", "\${1}h", $string);
  $string = preg_replace("/^kh/", "h", $string);
  $string = preg_replace("/^Kh/", "H", $string);
  return $string;
}
function encodestring($string){
  $string = 
  	str_replace(array(" ",""","&","<",">"), 
  		array(" "), $string);
  $string = preg_replace("/[_\s\.,?!\[\](){}]+/", "_", $string);
  $string = preg_replace("/-{2,}/", "--", $string);
  $string = preg_replace("/_-+_/", "--", $string);
  $string = preg_replace("/[_\-]+$/", "", $string);
  $string = Transliterate($string);
  $string = ToLower($string);
  $string = preg_replace("/j{2,}/", "j", $string);
  $string = preg_replace("/[^0-9a-z_\-]+/", "", $string);
  return $string;
}

Старый вариант, рабоатет на пхп < 5.1.2
// функция для разложения строки в массив 
// аналог стандартной str_split, но для работы с UTF-8
// проверено на многих языках
function str_split_utf8($str) {
    $split = 1;
    $array = array();
    for ($i=0; $i < strlen($str); ){
        $value = ord($str[$i]);
        if($value > 127){
            if ($value >= 192 && $value <= 223)      $split = 2;
            elseif ($value >= 224 && $value <= 239)  $split = 3;
            elseif ($value >= 240 && $value <= 247)  $split = 4;
        } else $split = 1;
        $key = NULL;
        for ( $j = 0; $j < $split; $j++, $i++ ) $key .= $str[$i];
        array_push( $array, $key );
    }
    return $array;
} 
function encodestring($st)  {
	// Сначала заменяем "односимвольные" фонемы.

	$st_cyr = str_split_utf8("абвгґдеёзиійклмнопрстуфхыэ"+
	"АБВГҐДЕЁЗИІЙКЛМНОПРСТУФХЫЭ ");
	$st_lat = str_split_utf8("abvggdeeziyyklmnoprstufhie"+
	"ABVGGDEEZIYYKLMNOPRSTUFHIE_");
	foreach ($st_lat as $key => $value) {
		$st_lat[$st_cyr[$key]] = $value; 
		unset($st_lat[$key]);
	}
	$st = strtr($st, $st_lat); 
	
	// Далее заменяем "многосивольные" фонемы, и фонемы без аналогов.

	$st_mf = array(
		           "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", 
		           "ш"=>"sh", "щ"=>"shch","ю"=>"yu", 
		           "я"=>"ya", "Ж"=>"ZH", "Ц"=>"TS", 
		           "Ч"=>"CH", "Ш"=>"SH", "Щ"=>"SHCH",
		           "Ю"=>"YU", "Я"=>"YA", "ї"=>"yi", 
		           "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye", 
		           "ь"=>"","ъ"=>"","Ь"=>"","Ъ"=>"");
	$st = strtr($st, $st_mf); 
	
	// Добиваем синтаксический мусор 
	return ereg_replace("[^A-Za-z0-9\.\–\(\)_]", "", $st); 
}
// пример:
echo encodestring("мухаха!@#$%^&*_+!№;%:?*[]{}-=,<>+(ололоЪь).");
// в результате получим:
// muhaha_(ololo).  

 2 комментария

 Теги: шпаргалка, php   encoding   utf8

Нужно создать сайт на 1С-Битрикс(Bitrix)?
Работает на движке e2 Selecta * All sources code was highlighted with w3club Highlighter.
deer.org.ua © 2008—2010 Vitaliy Bogdanets Deerua