loading...

PHP 截取字符串专题

发布时间:December 12, 2006 分类:PHP

PHP 计算页面执行时间

珊瑚虫IP库PHP操作类

1. 截取GB2312中文字符串

< ?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
//截取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
/*
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
/**
* @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 <wwccss@263.net>
* @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);
?>

Tags: PHP类, 字符串


已有 18 条评论 »

  1. 孤独剑 孤独剑

    很好,谢谢。。。

  2. husw husw

    非常详细,谢谢!!!

  3. shane lewis shane lewis

    我一定要来赞一下,你太神了啊,佩服哦

  4. jezz jezz

    不错啊,很好啊!

  5. jamix jamix

    不错哦...谢谢博主了!!!

  6. zhaowei zhaowei

    BugFree is good!

  7. TaoGOGO TaoGOGO

    第一个字符串截取函数如果 $start参数不为0的话会出问题,不知道你有没有遇到过,截取的初始字符不会从规定的开始,正如函数中所示,是直接加载length上了

  8. phpzxh phpzxh

    转载了。
    请问博主
    [\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+)这个是汉字的十六进制编码吧?

    还有个问题这些通用函数同样函数解决不了,就是,我给个字符串,有汉字和英文字母,
    比如:$string ="安检口abcdef";
    echo sysSubStr($string,5);
    我希望输出的是五个字符,为"安检口ab";
    而实际输出的为"安检";
    还有就是有个mb_substr函数可以实现,为什么不直接用这个。可能有些php环境部支持吧。。

    1. kimi kimi

      @phpzxh, mb_substr不是所有的服务器都有,而且这里计算数字的时候是按照一个汉字两个直接来计算的。06年写的的呢,找时间更新一下。

  9. 杜杜 杜杜

    http://www.ccvita.com/27.html
    任意网址字符串截取 www.ccvita.com 这一部分或http://www.ccvita.com这一部分,找不到好的实现方法,不知道您有什么好的办法!!

    QQ:670608809

  10. 谢谢 谢谢

    多谢了。我的截取一直都有问题,现在终于解决了,再次谢谢!

  11. 谢谢 谢谢

    辛苦博主了

  12. jayjiang jayjiang

    没有一个全能的

  13. hkmcgogo hkmcgogo

    正在写wordpress的插件,为中文字符处理烦恼中

  14. hkmcgogo hkmcgogo

    正在写wp的插件,为中文字符处理烦恼中
    你的utf-8有用

  15. jeffstric jeffstric

    我把你的函数和另一个UTF-8截取函数一起测试了一下,还是你的快阿

添加新评论 »

captcha
请输入验证码