【问题标题】:Foreign Chars in url_title() in CodeigniterCodeigniter 中 url_title() 中的外来字符
【发布时间】:2014-12-08 14:00:35
【问题描述】:

我在 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);

除非字符串以 Ç,Ş,Ğ 之类的外来字符开头,否则它工作得很好。如果这些字符在字符串的中间,它会优雅地转换。但如果以这些开头,它只是删除字符而不是用机器替换。

感谢您的帮助。

【问题讨论】:

标签: php codeigniter slug non-ascii-characters


【解决方案1】:

经过一番繁琐的搜索,发现url_title()函数并不是主要原因。实际上,删除初始外来字符的并不是 CI:

pathinfo($posted_file_full_name, PATHINFO_FILENAME);

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

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

现在它按预期工作了。希望这可以帮助其他陷入这种阶段的人。

【讨论】:

  • 如果它可能有帮助,来自PHP documentation:“pathinfo() 是区域设置感知的,因此要正确解析包含多字节字符的路径,必须使用 setlocale() 设置匹配的区域设置函数。”
猜你喜欢
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 2012-01-18
  • 2019-04-06
相关资源
最近更新 更多