php中英文混合排版中处理字符串常用的函数

  /*  我们在处理中文数据时,经常要处理一些情况,下面就是针对  这些情况,我做的一些函数,已经用在了实践中    */    # 判断某个位置是中文字符的左还是右半部分,或不是中文  # 返回值 -1 左 0 不是中文字符 1 右  # 用法  /*  $a = this is 中文;  print is_chinese($a, 1); // 0  print is_chinese($a,8); // -1  print is_chinese($a,9); // 1  */  function is_chinese(&$str, $location) {  $ch = true;  $i = $location;  while(ord($str[$i])>0xa0 && $i >= 0) {  $ch = !$ch;  $i –;  }    if($i != $location) {  $f_str = $ch ? 1: -1;  }  else {  $f_str = false;  }    return $f_str;  }    # 中文字符串倒置函数  # 如果一个将一个有中文的字符串用strrev倒过来,就会产生乱码  /*  print cstrrev(this is 中文); // 文中 si siht  */    function cstrrev(&$str) {  $long = strlen($str);  for($f_str=, $chinese=false, $i=$long-1; $i>=0; $i–) {  if(ord($str[$i]) > 0xa0) {  $chinese = ! $chinese;  if($chinese == false) {  $f_str .= $str[$i].$str[$i+1];  }  }  else {  $f_str .= $str[$i];  }  }  return $f_str;  }  /* 中文字符串截取函数  一些中文字符串截取函数经常有一些问题,例如在一些自动换行程序中  $a=“1中2”;  经两次截取后,  csubstr($str,$a,0,2);  csubstr($str, $a, 2,2)  由于载取位置指向“中”的右字节,可能会是这样的结果  1, 2  用本函数会产生正确的结果  1中, 2  */  # start 开始位置,从0开始  # long = 0 则从start 一直取到字符串尾  # ltor = true 时从左到右取字符,false 时到右到左取字符  # $cn_len 中文字符按字节取还是字数取,如果按字数取,则一个中文当一个字节计算    function csubstr(&$str, $start=0, $long=0, $ltor=true, $cn_len=2) {  if($long == 0) $long = strlen($str);  if($ltor == false) $str = cstrrev($str);    if($cn_len == 1) {    for($i=0, $fs=0; $i

Posted in 未分类