php截取字符串并保留完整xml标签的函数代码

 更新时间:2013年02月06日 17:41:07   作者:  
截取字符串并保留完整xml标签的php代码,有需要的朋友可以参考下
复制代码 代码如下:

<?php 
    /**
     * author: goosman
     * blog: http://blog.csdn.net/lgg201
     * mail: lgg860911@yahoo.com.cn
     */ 

    $str    = '0123456789<a>012</a>0123456789'; 
    function substr_remain_tag($s, $o, $l) { 
        $is_match   = preg_match_all(<<<heredoc 

    #该正则表达式解析xml标签, 标签属性内部支持转义符"\", 支持对"\"自身和对应引号的转义 
    <(\w+)             #标签开始 
        (?:          #属性列表 
            \s+       #前置空格 
            \w+    #属性名
            \s*    #属性名后的空白(为了兼容) 
            =        #属性名值之间的等号 
            \s*       #属性值前的空白(为了兼容) 
            (?:         #属性值(引号处理) 
                "         #双引号的情况 
                (?: 
                    \\\\\\\\   #吃掉连续两个转义符(表示转义符自身) 

                    \\\\"          #吃掉转义符接着一个引号(表示转义的引号) 

                    [^"\\\\]*   #其他字符 
                )* 
                " 

                '       #单引号情况 
                (?: 
                    \\\\\\\\   #吃掉连续两个转义符(表示转义符自身) 

                    \\\\'   #吃掉转义符接着一个引号(表示转义的引号) 

                    [^'\\\\]*       #其他字符 
                )* 
                ' 
            ) 
        )* 
    > 
    .*?               #标签内容 
    </(?1)>     #结束标签 
    ;x 
    heredoc 
    , $s, $matches, PREG_OFFSET_CAPTURE, $o); 
        if ( $is_match ) { 
            foreach ( $matches[0] as $match ) { 
                $o0 = $match[1]; 
                #标签左边界越过截取目标右边界, 退出 
                if ( $o0 >= $o + $l ) break; 
                $l0 = strlen($match[0]); 
                #标签右边界在截取目标右边界内, 继续 
                if ( $o0 + $l0 < $o + $l ) continue; 

                #以下为标签跨边界处理 
                $l  = $o0 + $l0 - $o; 
                break; 
            } 
        } 
        return substr($s, $o, $l); 
    }  
    echo $str . chr(10); 
    echo substr_remain_tag($str, 0, 20) . chr(10);

相关文章

  • PHP基于ORM方式操作MySQL数据库实例

    PHP基于ORM方式操作MySQL数据库实例

    这篇文章主要介绍了PHP基于ORM方式操作MySQL数据库,结合具体实例形式分析了php针对mysql数据库常用操作的封装与使用技巧,需要的朋友可以参考下
    2017-06-06
  • PHP中常用的魔术方法

    PHP中常用的魔术方法

    本篇文章主要介绍了PHP中常用的魔术方法的相关资料。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • php实现计数器方法小结

    php实现计数器方法小结

    这篇文章主要介绍了php实现计数器方法,总结了三款非常实用的计数器实现方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • php绘制一条直线的方法

    php绘制一条直线的方法

    这篇文章主要介绍了php绘制一条直线的方法,主要涉及GD库中imageline方法的使用技巧,需要的朋友可以参考下
    2015-01-01
  • PHP计划任务、定时执行任务的实现代码

    PHP计划任务、定时执行任务的实现代码

    PHP计划任务、定时执行任务的实现用到的函数 ignore_user_abort(),set_time_limit(0),sleep($interval) 此代码只要运行一次后关闭浏览器即可。
    2011-04-04
  • PHP排序算法的复习和总结

    PHP排序算法的复习和总结

    对于PHP中对数组的元素进行排序,这个是很经常用到的,之前的项目中也有,而且对于几种排序我们都是用的是asort arsort 等PHP原生函数,没有自己去实现,所以就对一下的几个函数进行总结,这个会不断的进行补充,自己也可以好好的复习和总结
    2012-02-02
  • php桥接模式应用案例分析

    php桥接模式应用案例分析

    这篇文章主要介绍了php桥接模式应用,结合具体案例形式分析了php桥接模式原理及信息发送相关应用技巧,需要的朋友可以参考下
    2019-10-10
  • php中禁止单个IP与ip段访问的代码小结

    php中禁止单个IP与ip段访问的代码小结

    今天网上有人问我php中如何禁用ip访问,通过测试发现如下的代码不错,原理也比较简单
    2012-07-07
  • PHP对象相关知识总结

    PHP对象相关知识总结

    这篇文章主要介绍了PHP对象相关知识总结的相关资料,需要的朋友可以参考下
    2017-04-04
  • php判断两个浮点数是否相等的方法

    php判断两个浮点数是否相等的方法

    这篇文章主要介绍了php判断两个浮点数是否相等的方法,涉及php操作浮点数的技巧,比较实用,需要的朋友可以参考下
    2015-03-03

最新评论