记录一个php的html标签自动闭合的函数代码
<?php function fix_html_tags( $input , $single_tags = array ()) { $result = null; $stack = array (); //标签栈 $_single_tags = array ( 'br' , 'hr' , 'img' , 'input' ); //合理的单标签 if ( $single_tags && is_array ( $single_tags )) { $_single_tags = array_merge ( $_single_tags , $single_tags ); $_single_tags = array_map ( 'strtolower' , $_single_tags ); $_single_tags = array_unique ( $_single_tags ); } //返回标签分隔之后的内容,包括标签本身 $content = preg_split( '/(<[^>]+>)/si' , $input , null, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); foreach ( $content as $val ) { //匹配未闭合的自闭合标签 如 <br> <hr> 等 if (preg_match( '/<(\w+)[^\/]*>/si' , $val , $m ) && in_array( strtolower ( $m [1]), $_single_tags ) ) { $result .= "\r\n" . $val ; } //匹配标准书写的自闭合标签,直接返回,不入栈 else if (preg_match( '/<(\w+)[^\/]*\/>/si' , $val , $m )) { $result .= $val ; } //匹配开始标签,并入栈 else if (preg_match( '/<(\w+)[^\/]*>/si' , $val , $m )) { $result .= "\r\n" . str_repeat ( "\t" , count ( $stack )) . $val ; array_push ( $stack , $m [1]); } //匹配闭合标签,匹配前先判断当前闭合标签是栈顶标签的闭合,优先闭合栈顶标签 else if (preg_match( '/<\/(\w+)[^\/]*>/si' , $val , $m )) { //出栈,多余的闭合标签直接舍弃 if ( strtolower ( end ( $stack )) == strtolower ( $m [1])) { array_pop ( $stack ); $result .= $val ; } } else { $result .= $val ; } } //倒出所有栈内元素 while ( $stack ) { $result .= "</" . array_pop ( $stack ). ">" ; $result .= "\r\n" ; } return $result ; } $str = "<div>sdfsdf<span>2<span></span>34534<div>121</span></div>" ; echo fix_html_tags( $str ); ?> |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp
· drools 规则引擎和 solon-flow 哪个好?solon-flow 简明教程