Транслитерация урлов

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
Здравствуйте.
Есть функция транслитерации урлов из заголовков статей
PHP:
function translitIt($str) 
{
    $tr = array(
        "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g",
        "Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i",
        "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
        "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
        "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
        "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
        "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
        "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
        "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
        "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
        "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
        "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
        "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya", 
        " "=> "_", "."=> "", "/"=> "_"
    );
    return strtr($str,$tr);
}
Подскажите, пожалуйста, как её модифицировать так, чтобы все символы, которые не попали в список, просто удалялись.
 
Google много чего выдает, например так.

Код:
function translitIt($str)   {
//оставляем все буквы английского алфавита, русского и пробелы
         $str = preg_replace("/[^\w
АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЫЪЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщыъьэюя]/","",$str);
//заменили пробелы
         $title = str_replace(" ","-",$title);
         $title = str_replace("--","-",$title);
$tr = array( 
        "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g", 
        "Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i", 
        "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n", 
        "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t", 
        "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch", 
        "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"", 
        "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b", 
        "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j", 
        "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l", 
        "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r", 
        "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h", 
        "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y", 
        "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",  
        " "=> "_", "."=> "", "/"=> "_" 
); 


        return strtr($str,$tr); 
}
 
  • Заблокирован
  • #3
Держите, функция честно выдернута из dle работает без нареканий, пример тому огромное количество сайтов на этом двиге
PHP:
function totranslit($var, $lower = true, $punkt = true) {
	$NpjLettersFrom = "абвгдезиклмнопрстуфцыі";
	$NpjLettersTo = "abvgdeziklmnoprstufcyi";
	$NpjBiLetters = array ("й" => "j", "ё" => "yo", "ж" => "zh", "х" => "x", "ч" => "ch", "ш" => "sh", "щ" => "shh", "э" => "ye", "ю" => "yu", "я" => "ya", "ъ" => "", "ь" => "", "ї" => "yi", "є" => "ye" );
	$NpjCaps = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯЇЄІ";
	$NpjSmall = "абвгдеёжзийклмнопрстуфхцчшщьъыэюяїєі";
	$var = str_replace( ".php", "", $var );
	$var = trim( strip_tags( $var ) );
	$var = preg_replace( "/\s+/ms", "-", $var );
	$var = strtr( $var, $NpjCaps, $NpjSmall );
	$var = strtr( $var, $NpjLettersFrom, $NpjLettersTo );
	$var = strtr( $var, $NpjBiLetters );
	if ( $punkt ) $var = preg_replace( "/[^a-z0-9\_\-.]+/mi", "", $var );
	else $var = preg_replace( "/[^a-z0-9\_\-]+/mi", "", $var );
	$var = preg_replace( '#[\-]+#i', '-', $var );
	if ( $lower ) $var = strtolower( $var );
	if( strlen( $var ) > 50 ) {
		$var = substr( $var, 0, 50 );
		if( ($temp_max = strrpos( $var, '-' )) ) $var = substr( $var, 0, $temp_max );
	}
	return $var;
}
 
Назад
Сверху