最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • php 截取字符串函数(中文字符串)

    php 截取字符串函数(中文字符串) 这是一款php 截取字符串函数哦,这是一款支持中文字符串哦,它可以截取html与中西文,等混合的内容,并且把html标签不算在字符截取之内,如果html标签没有闭合,程序将自动过滤多余的标签。

    方法一:

    1. function mysubstr( $str$length ){ 
    2.      
    3.     $tagcnt = 0; 
    4.     $charcnt = 0; 
    5.     $tag = ''
    6.     $maxlen = strlen$str ); 
    7.     $resultstr = ''
    8.     $tagstack = array(); 
    9.     for$i = 0; $i < $length$i++ ){ 
    10.         if$str[$i] == '<' ){ 
    11.             $resultstr .= $str[$i]; 
    12.             for$j=$i$str[$j]!='>'$j++,$length++ ){ 
    13.                 $tag .= $str[$j]; 
    14.             } 
    15.             $tagcnt++; 
    16.             $length++; 
    17.             $tag .= '>'
    18.              
    19.             //如果是开始标记,则入栈,如果是与之相对应的结束标记则出栈 
    20.             if( preg_match('/<([^/]+)?>/i'$tag$r) ){ 
    21.                 echo '入栈:',htmlspecialchars($r[1]),'<br />'
    22.                 array_push($tagstack$r[1]); 
    23.             } 
    24.             elseif( preg_match( '/'.$tagstack[count($tagstack)-1].'/'$tag ) ){ 
    25.                 echo '出栈:',htmlspecialchars($tagstack[count($tagstack)-1]),'<br />'
    26.                 array_pop$tagstack ); 
    27.             } 
    28.             $tag = ''
    29.             continue
    30.         } 
    31.         $charcnt++; 
    32.         $resultstr .= $str[$i]; 
    33.     } 
    34.      
    35.     echo '<hr size=1>最后结果为:'
    36.     //栈是空的直接返回 
    37.     if(emptyempty($tagstack)){ 
    38.         return $resultstr
    39.     } 
    40.     //否则去掉没有结束标记的开始标记 
    41.     else
    42.          
    43.         while(!emptyempty($tagstack)){ 
    44.             $tag = array_pop($tagstack); 
    45.             $index = strrpos($resultstr$tag); 
    46.             for($i = $index-1; $resultstr[$i] != '>'$i++ ){ 
    47.                 $resultstr[$i] = ''
    48.             } 
    49.             $resultstr[$i++] = ''
    50.          
    51.         } 
    52.         return $resultstr
    53.     } 
    54.      
    55. $sttime = microtime(true); 
    56. $stmem = memory_get_usage(); 
    57. $str = "a1<body>b2<p>c3<em>d4</em>e5</p>f6</body>g7h8"
    58. echo '处理结果为:<br/><hr size=1>',htmlspecialchars( mysubstr( $str, 18 ) ),'<br />'
    59. echo "内存使用情况:",(memory_get_usage()-$stmem),'<br />'
    60. echo "算法运行时间(microtime):",(microtime(true)-$sttime),'<br/>'

    方法二:

    1. ** 
    2.  * 函数名 html_substr 
    3.  * 功能 从html串中截取指定长度的字串,html标记不计算在内 
    4.  * 参数 
    5.  *  $str 要截取的串 
    6.  *  $len 要截取的长度 
    7.  *  $mode 不匹配的标记的处理方式 0 删去(默认),1 补齐 
    8.  * 返回 截取到的串 
    9.  * 说明 
    10.  *  未考虑多字节字符,仅已字节做计数单位 
    11.  *  未考虑可单独存在的标记 
    12.  **/ 
    13. function html_substr($str$len$mode=0) { 
    14.   $ar= preg_split('/(<!–.*–>|<[^>]*>)/s'$str, -1, preg_split_delim_capture); 
    15.   foreach($ar as $k => $v) { 
    16.     if($v{0} != '<') { 
    17.       $len = $len – strlen($v); 
    18.       if($len < 0) $ar[$k] = substr($v, 0, $len); 
    19.     }else $ar[$k] = strtolower($v); 
    20.     if($len <= 0) break
    21.   } 
    22.   $ar = array_slice($ar, 0, $k+1); 
    23.   $len = count($ar); 
    24.   foreach($ar as $k=>$v) { 
    25.     if($v{0} == '<' && $v[1] != '/') { 
    26.       $ch = str_replace('<''</'$v); 
    27.       for($i=$k+1; $i<$len && $ar[$i]!=$ch$i++); 
    28.       if($i == $len
    29.         if($mode
    30.           $ar[$len] = $ch . $ar[$len]; 
    31.         else 
    32.           $ar[$k] = ''
    33.     } 
    34.   } 
    35.   return join(''$ar); 
    36. $str = "123<em>abc</em>456<em>def</em>789"
    37. echo '<xmp>'
    38. echo html_substr($str, 5) . php_eol; 
    39. echo html_substr($str, 5, 1); 

    方法三:

    1. $str = "a1<body>b2c3<p><em>d4</em>e</p>5f6</body>g7h8"
    2. $gn  = 7; 
    3. $i   = $j = $k = 0; 
    4. while( ($c = $str[$i++]) && $j < $gn )  
    5.     if$c == '<'
    6.     { 
    7.         $tag = 1; 
    8.     } 
    9.     elseif($c == '>'
    10.     { 
    11.         if(trim($tg,'/') == 'em'
    12.         { 
    13.             $tgs[$j-1] = '<'.$tg.'>'
    14.         } 
    15.         else  
    16.         { 
    17.             if($tgs[$j-1]) $ogs[$j-1] = '1|'.'<'.$tg.'>'
    18.             else $ogs[$j-1]           = '0|'.'<'.$tg.'>'
    19.         } 
    20.         $tag = 0; 
    21.         $tg  = ''
    22.     } 
    23.     elseif($tag == 1) 
    24.     { 
    25.         $tg .= $c
    26.     } 
    27.     else 
    28.     { 
    29.         $tmp[] = $c
    30.         $j++; 
    31.     } 
    32. $ts = count($tgs); 
    33. if($ts % 2) array_pop($tgs); 
    34. foreach($tmp as $k=>$v
    35.    $ba = explode('|',$ogs[$k],2); 
    36.    if$tgs[$k] && $ogs[$k]) 
    37.    { 
    38.         if($ba[0]) 
    39.         { 
    40.             $s .= $v.$tgs[$k].$ba[1]; 
    41.         }     
    42.         else $s .= $v.$ba[1].$tgs[$k]; 
    43.    } 
    44.    else $s .= $v.$tgs[$k].$ba[1]; 
    45. echo htmlspecialchars($s); 
    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » php 截取字符串函数(中文字符串)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级