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

2015-01-24信息快讯网

截取字符串并保留完整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 如何获取数组第一个值
php number_format() 函数通过千位分组来格式化数字的实现代码
php实现统计邮件大小的方法
php addslashes 利用递归实现使用反斜线引用字符串
如何使用PHP批量去除文件UTF8 BOM信息
PHP自动识别字符集并完成转码详解
浅析51个PHP处理字符串的函数
通过table标签,PHP输出EXCEL的实现方法
table标签的结构与合并单元格的实现方法
php的数组与字符串的转换函数整理汇总
php字符串截取的简单方法
PHP删除HTMl标签的三种解决方法
PHP删除HTMl标签的实现代码
解析thinkphp中的导入文件标签
解析smarty 截取字符串函数 truncate的用法介绍
解析使用substr截取UTF-8中文字符串出现乱码的问题
php中使用preg_replace函数匹配图片并加上链接的方法
php中存储用户ID和密码到mysql数据库的方法
php中使用__autoload()自动加载未定义类的实现代码
php中使用preg_match_all匹配文章中的图片
php中使用addslashes函数报错问题的解决方法
php中设置index.php文件为只读的方法
php中将字符串转为HTML的实体引用的一个类
php中删除字符串中最先出现某个字符的实现代码
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
PHP中计算字符串相似度的函数代码
PHP编码转换函数 自动转换字符集支持数组转换
thinkPHP的Html模板标签使用方法
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
php标签云的实现代码
php使HTML标签自动补全闭合函数代码
比较discuz和ecshop的截取字符串函数php版
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
php截取后台登陆密码的代码
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
©2014-2024 dbsqp.com