用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6316|回复: 2
收起左侧

[辅助方法 Helper] [1.6.1]CI重写url_helper 中url_title 替换 西方语言特殊字符补丁

[复制链接]
发表于 2008-3-7 00:08:44 | 显示全部楼层 |阅读模式
因为欧洲 字符中有很多特殊字符(非英文)如 上面带一撇的e:é 等等(地址栏不完全支持,就像IE7才支持中文一样),CI自己的url_title 的时候,把这些字符全部去掉了,严重影响了 google的搜索,嘿嘿,所以,我们必须把他们替换成一般浏览器 地址栏支持的字符。

1. 在application/helper下创建 MY_url_helper.php
2.复制 CI库中的 url_title() 函数 到上面的文件。(包括if (! function_exists('url_title')) 正个if)
3.添加2 个替换数组(关键,虽然不理解,从公司法国技术部小伙子那问到的)
PHP复制代码
 $str = strtr($str,"\xA1\xAA\xBA\xBF\xC0\xC1\xC2\xC3\xC5\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD8\xD9\xDA\xDB\xDD\xE0\xE1\xE2\xE3\xE5\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF8\xF9\xFA\xFB\xFD\xFF","!ao?AAAAACEEEEIIIIDNOOOOOUUUYaaaaaceeeeiiiidnooooouuuyy");
     $str = strtr($str, array("\xC4"=>"Ae", "\xC6"=>"AE", "\xD6"=>"Oe", "\xDC"=>"Ue", "\xDE"=>"TH", "\xDF"=>"ss", "\xE4"=>"ae", "\xE6"=>"ae", "\xF6"=>"oe", "\xFC"=>"ue", "\xFE"=>"th"));
 
复制代码
OK.完成。application/helper/MY_url_helper.php正个文件如下
PHP复制代码
 
<?php
// url_title function with muti-language by lony.
if (! function_exists('url_title'))
{
function url_title($str, $separator = 'dash')
{
   
    $str = strtr($str,"\xA1\xAA\xBA\xBF\xC0\xC1\xC2\xC3\xC5\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD8\xD9\xDA\xDB\xDD\xE0\xE1\xE2\xE3\xE5\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF8\xF9\xFA\xFB\xFD\xFF","!ao?AAAAACEEEEIIIIDNOOOOOUUUYaaaaaceeeeiiiidnooooouuuyy");
     $str = strtr($str, array("\xC4"=>"Ae", "\xC6"=>"AE", "\xD6"=>"Oe", "\xDC"=>"Ue", "\xDE"=>"TH", "\xDF"=>"ss", "\xE4"=>"ae", "\xE6"=>"ae", "\xF6"=>"oe", "\xFC"=>"ue", "\xFE"=>"th"));
   
   
  if ($separator == 'dash')
  {
   $search  = '_';
   $replace = '-';
  }
  else
  {
   $search  = '-';
   $replace = '_';
  }
 
  $trans = array(
      $search        => $replace,
      "\s+"        => $replace,
      "[^a-z0-9".$replace."]"    => '',
      $replace."+"      => $replace,
      $replace."$"      => '',
      "^".$replace      => ''
        );
  $str = strip_tags(strtolower($str));
 
  foreach ($trans as $key => $val)
  {
   $str = preg_replace("#".$key."#", $val, $str);
  }
 
  return trim(stripslashes($str));
}
}
?>
复制代码


上次发了一次,好像数据丢咯~~再不上~~

评分

参与人数 1威望 +5 收起 理由
Hex + 5 原创内容

查看全部评分

发表于 2008-3-7 09:28:16 | 显示全部楼层
上次是因为服务器升级造成的丢失,我向你表示歉意。
发表于 2008-3-24 09:56:35 | 显示全部楼层
太感谢了,方便大家了啊

本版积分规则