WEB开发网
开发学院WEB开发PHP PHP中的字符串截取自定义函数 阅读

PHP中的字符串截取自定义函数

 2008-02-15 18:19:02 来源:WEB开发网   
核心提示:使用到的库函数函数:Ord()返回字符的序数值语法: int ord(string string);内容说明 :本函数返回字符的 ASCII (美国国家标准交换码) 序数值,本函数和 chr() 函数相反,PHP中的字符串截取自定义函数,提示:ASCII 码127以后是汉字,即 ">127"

使用到的库函数
函数:Ord()
返回字符的序数值
语法: int ord(string string);
内容说明 :
本函数返回字符的 ASCII (美国国家标准交换码) 序数值。本函数和 chr() 函数相反。
提示:ASCII 码127以后是汉字,即 ">127" 为汉字

函数:substr()
语法: string substr(string string, int start, int [length]);
返回值: 字符串
内容说明:
本函数将字符串 string 的第 start 位起的字符串取出 length 个字符。若 start 为负数,则从字符串尾端算起。若可省略的参数 length 存在,但为负数,则表示取到倒数第 length 个字符。

strlen()
语法: int strlen(string str);
返回值: 整数
内容说明:
本函数返回指定的字符串长度。取得字符串长度。

----------------------------------------------------------------------

如果字符串比较短,比如主题title类的,可以使用循环判断汉字和英文字

<?
/*
------------------------------------------------------
参数:
$str_cut  需要截断的字符串
$length   允许字符串显示的最大长度 

程序功能:截取全角和半角(汉字和英文)混合的字符串以避免乱码
------------------------------------------------------
*/
function substr_cut($str_cut,$length)

  if (strlen($str_cut) > $length)
  { 
    for($i=0; $i < $length; $i++) 
    if (ord($str_cut[$i]) > 128)  $i++; 
    $str_cut = substr($str_cut,0,$i).".."; 
  } 
  return $str_cut; 
}
?>



    在php中使用传统的字符串截取函数substr处理含有中文字符的字符串时会出现汉字被切断的现象。当可以使用php扩展库时,我们可以用mb_substr代替。但是该扩展库在连接时有一定的困难——linux下需重新编译php,有时并不能可做到,更何况其冗余函数较多。 
    在网络上可以看到很多实现此功能的函数。但算法多是循环判断,当字符串较大时效率极低(比如上面的程序代码)。 为此这里介绍两个高效的函数:c_substr、m_substr。他们的用法完全与substr和mb_substr相同。不同之处在于:c_substr按字节计算,即一个汉字的长度为2;m_substr按字计算,即一个汉字的长度为1。可根据需要选用。 

<?
function c_substr($str,$start=0)

  $ch = chr(127); 
  $p = array("/[x81-xfe]([x81-xfe]|[x40-xfe])/","/[x01-x77]/"); 
  $r = array("",""); 
  if(func_num_args() > 2)
  {
    $end = func_get_arg(2); 
  }
  else
  {
    $end = strlen($str);
  }

1 2  下一页

Tags:PHP 字符串 截取

编辑录入:coldstar [复制链接] [打 印]
赞助商链接