当前位置: 代码迷 >> PHP >> php字符串截取(UTF-八/GB2312)
  详细解决方案

php字符串截取(UTF-八/GB2312)

热度:429   发布时间:2016-04-28 20:21:11.0
php字符串截取(UTF-8/GB2312)

1. 截取GB2312中文字符串

<?php
< ?php?
//截取中文字符串
function mysubstr($str, $start, $len) {
??? $tmpstr = "";
??? $strlen = $start + $len;
??? for($i = 0; $i < $strlen; $i++) {
??????? if(ord(substr($str, $i, 1)) > 0xa0) {
??????????? $tmpstr .= substr($str, $i, 2);
??????????? $i++;
??????? } else
??????????? $tmpstr .= substr($str, $i, 1);
??? }
??? return $tmpstr;
}
?>

2. 截取utf8编码的多字节字符串

<?php
< ?php
//截取utf8字符串
function utf8Substr($str, $from, $len)
{
??? return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
?????????????????????? '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
?????????????????????? '$1',$str);
}
?>
3. UTF-8、GB2312都支持的汉字截取函数

<?php
< ?php
/*?
Utf-8、gb2312都支持的汉字截取函数?
cut_str(字符串, 截取长度, 开始长度, 编码);?
编码默认为 utf-8?
开始长度默认为 0?
*/?
?
function cut_str($string, $sublen, $start = 0, $code = 'UTF-8')?
{?
??? if($code == 'UTF-8')?
??? {?
??????? $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";?
??????? preg_match_all($pa, $string, $t_string);?
?
??????? if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
??????? return join('', array_slice($t_string[0], $start, $sublen));?
??? }?
??? else?
??? {?
??????? $start = $start*2;?
??????? $sublen = $sublen*2;?
??????? $strlen = strlen($string);?
??????? $tmpstr = '';?
?
??????? for($i=0; $i< $strlen; $i++)?
??????? {?
??????????? if($i>=$start && $i< ($start+$sublen))?
??????????? {?
??????????????? if(ord(substr($string, $i, 1))>129)?
??????????????? {?
??????????????????? $tmpstr.= substr($string, $i, 2);?
??????????????? }?
??????????????? else?
??????????????? {?
??????????????????? $tmpstr.= substr($string, $i, 1);?
??????????????? }?
??????????? }?
??????????? if(ord(substr($string, $i, 1))>129) $i++;?
??????? }?
??????? if(strlen($tmpstr)< $strlen ) $tmpstr.= "...";?
??????? return $tmpstr;?
??? }?
}?
?
$str = "abcd需要截取的字符串";?
echo cut_str($str, 8, 0, 'gb2312');?
?>
4. BugFree 的字符截取函数

<?php
< ?php?
/**?
?* @package???? BugFree?
?* @version???? $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $?
?*?
?*?
?* Return part of a string(Enhance the function substr())?
?*?
?* @author????????????????? Chunsheng Wang <[email protected]>?
?* @param string? $String? the string to cut.?
?* @param int???? $Length? the length of returned string.?
?* @param booble? $Append? whether append "...": false|true?
?* @return string?????????? the cutted string.?
?*/?
function sysSubStr($String,$Length,$Append = false)?
{?
??? if (strlen($String) < = $Length )?
??? {?
??????? return $String;?
??? }?
??? else?
??? {?
??????? $I = 0;?
??????? while ($I < $Length)?
??????? {?
??????????? $StringTMP = substr($String,$I,1);?
??????????? if ( ord($StringTMP) >=224 )?
??????????? {?
??????????????? $StringTMP = substr($String,$I,3);?
??????????????? $I = $I + 3;?
??????????? }?
??????????? elseif( ord($StringTMP) >=192 )?
??????????? {?
??????????????? $StringTMP = substr($String,$I,2);?
??????????????? $I = $I + 2;?
??????????? }?
??????????? else?
??????????? {?
??????????????? $I = $I + 1;?
??????????? }?
??????????? $StringLast[] = $StringTMP;?
??????? }?
??????? $StringLast = implode("",$StringLast);?
??????? if($Append)?
??????? {?
??????????? $StringLast .= "...";?
??????? }?
??????? return $StringLast;?
??? }?
}?
?
$String = "CodeBit.cn -- 简单、精彩、通用";?
$Length = "18";?
$Append = false;?
echo sysSubStr($String,$Length,$Append);?
?>

  相关解决方案