Есть ли функция на php для преобразования текста вида "пример !? я ссылка *&"
в seo url "primer-ya-ssilka"
Это специфичная для России необходимость - поэтому такое не встроено. Поможет самопальный транслит вроде:
class seoTranslit
{
static public $rustolat = array(
'жё' => 'zho', // жёлоб -> zholob
'жю' => 'zhu', // жюри -> zhuri
'чё' => 'cho', // чёлка -> cholka
'щё' => 'shcho', // щётка -> shchotka
'щ' => 'shch',
'шю' => 'shu', // парашют -> parashut
'ч' => 'ch',
'ц' => 'ts',
'х' => 'kh',
'ю' => 'yu',
'я' => 'ya',
'ё' => 'yo',
'ж' => 'zh',
'ш' => 'sh',
'а' => 'a',
'б' => 'b',
'в' => 'v',
'г' => 'g',
'д' => 'd',
'е' => 'e',
'з' => 'z',
'и' => 'i',
'й' => 'j',
'к' => 'k',
'л' => 'l',
'м' => 'm',
'н' => 'n',
'о' => 'o',
'п' => 'p',
'р' => 'r',
'с' => 's',
'т' => 't',
'у' => 'u',
'ф' => 'f',
'ъ' => '',
'ы' => 'y',
'ьо' => 'io', // бульон -> bulion
'ь' => '',
'э' => 'e',
'шё' => 'sho', // шёлк -> sholk
);
static public function go($string)
{
$obfuscated = trim( mb_strtolower(preg_replace('/\s+/u', '-', preg_replace('/\W+/u', ' ', $string) )), '-');
$rustolat_re = '/'. implode("|", array_keys(self::$rustolat)) .'/';
return preg_replace_callback($rustolat_re, function($m){ return self::$rustolat[$m[0]];}, $obfuscated);
}
}
UPD:
Поправил код. Класс рабочий при установленной кодировке utf-8 - это
setlocale(LC_ALL,'ru_RU.utf8'/*может отличаться на разных серверах*/);
mb_internal_encoding("UTF-8");
mb_regex_encoding('UTF-8');
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором