Я использую иностранные символы с акцентом url_title()
в Codeigniter
function url_title ($str,$separator='-',$lowercase=FALSE) {
if ($separator=='dash') $separator = '-';
else if ($separator=='underscore') $separator = '_';
$q_separator = preg_quote($separator);
$trans = array(
'\.'=>$separator,
'\_'=>$separator,
'&.+?;'=>'',
'[^a-z0-9 _-]'=>'',
'\s+'=>$separator,
'('.$q_separator.')+'=>$separator
);
$str = strip_tags($str);
foreach ($trans as $key => $val) $str = preg_replace("#".$key."#i", $val, $str);
if ($lowercase === TRUE) $str = strtolower($str);
return trim($str, $separator);
}
И я вызываю функцию как url_title(convert_accented_characters($str),TRUE);
,
$str
заполняется как:
$posted_file_full_name = $_FILES['userfile']['name'];
$uploaded_file->filename = pathinfo($posted_file_full_name, PATHINFO_FILENAME);
$uploaded_file->extension = pathinfo($posted_file_full_name, PATHINFO_EXTENSION);
Это работает хорошо, если строка не начинается с иностранного символа, такого как Ç
,Ş
,Ğ
, Если эти символы находятся в середине строки, они преобразуются изящно. Но если он начинается с них, он просто удаляет символы, а не заменяет их соответствующими.
Спасибо за любую помощь.
После утомительного поиска выясняется, что url_title()
функция не главная причина. На самом деле, не CI удаляет исходные иностранные символы:
pathinfo($posted_file_full_name, PATHINFO_FILENAME);
Эта часть удаляет начальные символы. Я обновил свой код как:
$uploaded_file->filename = str_replace('.'.$uploaded_file->extension,'',$posted_file_full_name);
и теперь все работает как положено. Надеюсь, что это помогает другим, кто застрял в такой фазе.
Других решений пока нет …