| Всем привет. Прошу помощи в разработке ф-ции. Я ее написал насколько смог, но она не идеальна, т.к. всевозможные символы невозможно учесть.
function format_url($str=''){
$fixtext = '';
$nbsp = array(
"~"=>" ","`"=>" ","!"=>" ","@"=>" ",'"'=>" ","#"=>" ","№"=>" ",
"$"=>" ",";"=>" ","%"=>" ","^"=>" ",":"=>" ","&"=>" ","?"=>" ",
"*"=>" ","("=>" ",")"=>" ","-"=>" ","_"=>" ","+"=>" ","="=>" ",
"|"=>" ","["=>" ","]"=>" ","{"=>" ","}"=>" ","'"=>" ",","=>" ",
"."=>" ","<"=>" ",">"=>" ","/"=>" ","»"=>" ","«"=>" ","–"=>" ",
"""=>" "," "=>" ","•"=>" ","\\"=>" ","—"=>" "
);
$str = strtr(strip_tags($str),$nbsp);
$trans_arr = explode(" ", $str);
$symbol = array(
"~"=>"","`"=>"","!"=>"","@"=>"",'"'=>"","#"=>"","№"=>"",
"$"=>"",";"=>"","%"=>"","^"=>"",":"=>"","&"=>"","?"=>"",
"*"=>"","("=>"",")"=>"","-"=>"","_"=>"","+"=>"","="=>"",
"|"=>"","["=>"","]"=>"","{"=>"","}"=>"","'"=>"",","=>"",
"."=>"","<"=>"",">"=>"","/"=>"","»"=>"","«"=>"","–"=>"",
"""=>""," "=>"","•"=>"","\\"=>"","—"=>""
);
for($i=0;$i<count($trans_arr);$i++){
if(strtr($trans_arr[$i],$symbol) != ''){
$clear[] = strtr($trans_arr[$i],$symbol);
}
}
$p = 0;
for($j=0;$j<count($clear);$j++){
$p++;
$add = ($p != count($clear))?"-":"";
if($clear[$j] != ""){
$fixtext .= $clear[$j].$add;
}
}
$translit = array(
"а"=>"a","б"=>"b","в"=>"v","г"=>"g","ґ"=>"g","д"=>"d",
"е"=>"e","є"=>"e","ё"=>"e","ж"=>"zh","з"=>"z","и"=>"i",
"і"=>"i","ї"=>"i","й"=>"i","к"=>"k","л"=>"l","м"=>"m","н"=>"n",
"о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t","у"=>"u",
"ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch",
"ъ"=>"","ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya", "ей"=>"yei"
);
$fixtext = str_replace('\r\n','',mysql_real_escape_string($fixtext));
return strtr(mb_strtolower($fixtext,"UTF-8"),$translit);
}
|
Если переписывать все символы, это глупо как по мне, если я уже три вида тире вписал в массив фильтрации.
Пробовал пойти иным путем. Создать массив и туда запихнуть весь укр алфавит + часть из ру алфавита, что не повторяется и аналогично енг алфавит. Потом начал думать-писать, получается в алфавите 65 символов, а если в строке 200 символов, то это сколько придется циклу прокручиваться, чтобы все обойти и проверить.
$strok = ""fff/\\\ \ ааа68= quota . <br> <br/> lol \ \яяявс12hEEllo0o+_-)(*&^%$#@!~`«»—•";//строка
$strok = html_entity_decode(strip_tags($strok));//очистка от хтмл+преобразование хтмл сущностей в символы
$alfavit = array("а","б","в","г","ґ","д","е","є","ё","ж","з","и","і","ї","й",
"к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш",
"щ","ы","э","ю","я","1","2","3","4","5","6","7","8","9","0",
"b","d","f","g","h","j","k","l","m","n","q","r","s","t","u",
"v","w","z");//массив алфавитов
//цикл в цикл получается в котором идет сравнение строк
for($i=0;$i<strlen($strok);$i++){
for($j=0;$j<count($alfavit);$j++){
if(mb_substr($strok, $i, 1, "utf-8") == $alfavit[$j])
$mass[] = mb_substr($strok, $i, 1, "utf-8");
}
}
|
Видать неверно делаю, т.к. сообщение о нехватке памяти появляется через некоторое время. Темболее нужно как и в предыдущем варианте разделять слова одинарным тире, т.е. в результате должно получится так:
fff-ааа68-яяявс12hEEllo0o
|
Помогите прийти к универсальному методу обработки. Спасибо. | |