牛骨文教育服务平台(让学习变的简单)
博文笔记

截取字符函数

创建时间:2006-11-16 投稿人: 浏览次数:887

两个高效的函数: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);
  if($start < 0)
    $start += $end;

  if($start > 0) {
    $s = substr($str,0,$start);
    if($s[strlen($s)-1] > $ch) {
      $s = preg_replace($p,$r,$s);
    $start += strlen($s);
    }
  }
  $s = substr($str,$start,$end);
  $end = strlen($s);
  if($s[$end-1] > $ch) {
    $s = preg_replace($p,$r,$s);
    $end += strlen($s);
  }
  return substr($str,$start,$end);
}

function m_substr($str,$start) {
  preg_match_all("/[/x80-/xff]?./",$str,$ar);
  if(func_num_args() >= 3) {
    $end = func_get_arg(2);
    return join("",array_slice($ar[0],$start,$end));
  }else
    return join("",array_slice($ar[0],$start));

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。