Codeigniter中url_title()中的外部字符

时间:2014-10-13 22:01:48

标签: php codeigniter slug non-ascii-characters

我在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替换。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

经过繁琐的搜索后,发现url_title()功能不是主要原因。实际上,它不是删除初始外来字符的CI:

pathinfo($posted_file_full_name, PATHINFO_FILENAME);

此部分删除初始字符。我将我的代码更新为:

$uploaded_file->filename  = str_replace('.'.$uploaded_file->extension,'',$posted_file_full_name);

现在它按预期工作。希望这能帮助那些坚持这样一个阶段的人。