我在Codeigniter中使用带有url_title()
的外国重音字符
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);
它可以很好地使用Ç
,Ş
,Ğ
之类的外来字符开头。如果这些字符位于字符串的中间,则会正常转换。但是如果从那些开始,它只是删除字符而不是用mached替换。
感谢您的帮助。
答案 0 :(得分:0)
经过繁琐的搜索后,发现url_title()
功能不是主要原因。实际上,它不是删除初始外来字符的CI:
pathinfo($posted_file_full_name, PATHINFO_FILENAME);
此部分删除初始字符。我将我的代码更新为:
$uploaded_file->filename = str_replace('.'.$uploaded_file->extension,'',$posted_file_full_name);
现在它按预期工作。希望这能帮助那些坚持这样一个阶段的人。