문자열을 가로채고 완전한 XML 태그를 유지하는 PHP 코드
풀어 주다: 2016-07-25 09:05:41
-
- /**
- * author: goosman
- * blog: http://blog.csdn.net/lgg201
- * mail: lgg860911@yahoo.com.cn
- */
-
- $str = '01234567890120123456789';
- function substr_remain_tag($s, $o, $l) {
- $is_match = preg_match_all(<< ;
- #该正则表达式解析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);
复制代码
|
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31