php 截取字符串函数(中文字符串)
发布:smiling 来源: PHP粉丝网 添加日期:2013-12-11 14:25:09 浏览: 评论:0
php 截取字符串函数(中文字符串) 这是一款php 截取字符串函数哦,这是一款支持中文字符串哦,它可以截取html与中西文,等混合的内容,并且把html标签不算在字符截取之内,如果html标签没有闭合,程序将自动过滤多余的标签。
方法一:
- function mysubstr( $str, $length ){
- $tagcnt = 0;
- $charcnt = 0;
- $tag = '';
- $maxlen = strlen( $str );
- $resultstr = '';
- $tagstack = array();
- for( $i = 0; $i < $length; $i++ ){
- if( $str[$i] == '<' ){
- $resultstr .= $str[$i];
- for( $j=$i; $str[$j]!='>'; $j++,$length++ ){
- $tag .= $str[$j];
- }
- $tagcnt++;
- $length++;
- $tag .= '>';
- //如果是开始标记,则入栈,如果是与之相对应的结束标记则出栈
- if( preg_match('/<([^/]+)?>/i', $tag, $r) ){
- echo '入栈:',htmlspecialchars($r[1]),'<br />';
- array_push($tagstack, $r[1]);
- }
- elseif( preg_match( '/'.$tagstack[count($tagstack)-1].'/', $tag ) ){
- echo '出栈:',htmlspecialchars($tagstack[count($tagstack)-1]),'<br />';
- array_pop( $tagstack );
- }
- $tag = '';
- continue;
- }
- $charcnt++;
- $resultstr .= $str[$i];
- }
- echo '<hr size=1>最后结果为:';
- //栈是空的直接返回
- if(emptyempty($tagstack)){
- return $resultstr;
- }
- //否则去掉没有结束标记的开始标记
- else{
- while(!emptyempty($tagstack)){
- $tag = array_pop($tagstack);
- $index = strrpos($resultstr, $tag);
- for($i = $index-1; $resultstr[$i] != '>'; $i++ ){
- $resultstr[$i] = '';
- }
- $resultstr[$i++] = '';
- }
- return $resultstr;
- }
- }
- $sttime = microtime(true);
- $stmem = memory_get_usage();
- $str = "a1<body>b2<p>c3<em>d4</em>e5</p>f6</body>g7h8";
- echo '处理结果为:<br/><hr size=1>',htmlspecialchars( mysubstr( $str, 18 ) ),'<br />';
- echo "内存使用情况:",(memory_get_usage()-$stmem),'<br />';
- echo "算法运行时间(microtime):",(microtime(true)-$sttime),'<br/>';
方法二:
- **
- * 函数名 html_substr
- * 功能 从html串中截取指定长度的字串,html标记不计算在内
- * 参数
- * $str 要截取的串
- * $len 要截取的长度
- * $mode 不匹配的标记的处理方式 0 删去(默认),1 补齐
- * 返回 截取到的串
- * 说明
- * 未考虑多字节字符,仅已字节做计数单位
- * 未考虑可单独存在的标记
- **/
- function html_substr($str, $len, $mode=0) {
- $ar= preg_split('/(<!--.*-->|<[^>]*>)/s', $str, -1, preg_split_delim_capture);
- foreach($ar as $k => $v) {
- if($v{0} != '<') {
- $len = $len - strlen($v);
- if($len < 0) $ar[$k] = substr($v, 0, $len);
- }else $ar[$k] = strtolower($v);
- if($len <= 0) break;
- }
- $ar = array_slice($ar, 0, $k+1);
- $len = count($ar);
- foreach($ar as $k=>$v) {
- if($v{0} == '<' && $v[1] != '/') {
- $ch = str_replace('<', '</', $v);
- for($i=$k+1; $i<$len && $ar[$i]!=$ch; $i++);
- if($i == $len)
- if($mode)
- $ar[$len] = $ch . $ar[$len];
- else
- $ar[$k] = '';
- }
- }
- return join('', $ar);
- }
- $str = "123<em>abc</em>456<em>def</em>789";
- echo '<xmp>';
- echo html_substr($str, 5) . php_eol;
- echo html_substr($str, 5, 1);
方法三:
- $str = "a1<body>b2c3<p><em>d4</em>e</p>5f6</body>g7h8";
- $gn = 7;
- $i = $j = $k = 0;
- while( ($c = $str[$i++]) && $j < $gn )
- {
- if( $c == '<')
- {
- $tag = 1;
- }
- elseif($c == '>')
- {
- if(trim($tg,'/') == 'em')
- {
- $tgs[$j-1] = '<'.$tg.'>';
- }
- else
- {
- if($tgs[$j-1]) $ogs[$j-1] = '1|'.'<'.$tg.'>';
- else $ogs[$j-1] = '0|'.'<'.$tg.'>';
- }
- $tag = 0;
- $tg = '';
- }
- elseif($tag == 1)
- {
- $tg .= $c;
- }
- else
- {
- $tmp[] = $c;
- $j++;
- }
- }
- $ts = count($tgs);
- if($ts % 2) array_pop($tgs);
- foreach($tmp as $k=>$v)
- {
- $ba = explode('|',$ogs[$k],2);
- if( $tgs[$k] && $ogs[$k])
- {
- if($ba[0])
- {
- $s .= $v.$tgs[$k].$ba[1];
- }
- else $s .= $v.$ba[1].$tgs[$k];
- }
- else $s .= $v.$tgs[$k].$ba[1];
- }
- echo htmlspecialchars($s);
Tags: 截取 字符串 函数 中文字符串
- 上一篇:php 删除目录及所有文件
- 下一篇:php生成随机密码函数
相关文章
- ·php中文汉字截取函数(2013-11-12)
- ·php mb_strlen()中英混体字符截取代码(2013-11-29)
- ·php支持gb2312,uft-8中英文字符截取函数(2013-11-29)
- ·php中中文截取函数mb_substr()详细(2013-11-30)
- ·PHP substr 截取中文乱码的问题解决办法(2013-12-07)
- ·两款php 截取字符串函数(2013-12-16)
- ·PHP字符截取函数,兼容各类gbk,utf-8编码(2014-01-08)
- ·php中文汉字字符串的截取问号(2014-01-12)
- ·php怎么截取中文字符串(2014-01-16)
- ·php利用大括号截取字符的方法(2014-06-08)
- ·php截取字符串长度函数详解(2014-07-26)
- ·php 截取中文字符串实现程序(2014-07-27)
- ·php中英文字符串截取函数(包括html)(2014-08-02)
- ·php 中英文字符串截取函数(2014-08-05)
- ·php 中英文混合文本截取字符串函数(2014-08-16)
- ·php 截取字符串函数(2014-08-16)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)