php去除html标签_用PHP操作DOM (一)

58404c2313b3731a5a6010f3e6f846fb.png

从事PHP开发很多年了,也写过些小项目,经常要在后台生成前端输出的HTML脚本,说白了就是把HTML语言以字符串的方式嵌入在PHP的输入语句中,单纯的输出没什么问题,但遇到DOM修改时很是麻烦,要做各种查找与替换,还要写一大堆正则,反反复复,效率极低。也用过网上的一些PHP操作DOM的开源项目,不过问题多多,要么就停更很久了,要么不完善,我在写代码这个问题上是个不将就的人,所以,就自己想整一个这么个项目,我的目的很简单,就是要在PHP里操作DOM就像Jquery一样,能生成,能解析,还要能符合目前H5及CSS3的特性。我准备花点时间来记录这一过程,应该要分几个章节来写,我的环境是LAMP,PHP基于PHP7.3版本。先来说一下书写规则。对了,这是我在简书上写的第一篇文章,所以态度上我是很认真的。我给这个项目取名叫SPEEDX,很多命名前缀我会带上这个项目名,为什么呢,因为PHP中我特别不喜欢命名空间这么个玩意,不知为什么,性格如此。

往往想象很美好的事情,现实确很骨感。为了达到对DOM及CSS精准操作的目的,不搞大杂会,为此我仔细分析了一下,本项目操作主要对像应该这样分类:

1. CSS类:`.className{属性列表}`

2. CSS属性 : `vName: value`

3. DOM标签 诸如`

4. DOM属性,如: `

5. DOM节点基本内容: 就是节点内的内容,也可以人包含其它节点

为此,我弄了个比较详细的config文件,其中定义的HTML及CSS中所用的标签、属性及相关浏览器的支持情况。其中重要的几项常量定义我做一下说明:

  • SPEEDX_STYLE_NULL = 0;//CSS3标准,但还没有浏览器实现
  • SPEEDX_STYLE_W3C = 1; //W3C标准属性:表示支持这一属性或支持这一属性值的浏览器都是采用标准格式,即不带浏览器前缀的书写方式;
  • SPEEDX_STYLE_MOZ = 2; //火狐浏览器内核(-moz-):表示支持这一属性或属性值的火狐浏览器在书写格式上要带"-moz-"前缀;
  • SPEEDX_STYLE_WEBKIT = 4; //Chrome和Safari浏览器内核:表示支持这一属性或属性值的浏览器在CSS书写格式上要带"-webkit-"前缀;
  • SPEEDX_STYLE_MS = 8; //IE浏览器内核:IE支持的CSS特性,要加"-ms-"前缀
  • SPEEDX_STYLE_O = 16; //Opera浏览器内核:对于兼容部分Opera浏览器,CSS特性前要加"-o-"前缀
  • SPEEDX_STYLE_ALL = 31; //所有兼容模式,为了兼容大部分主流浏览器的不同版本,要加上上面所有的前缀。

具体配置如下:文件中已备注说明:

<?php /** * speedx版本及版本号 */ const SPEEDX_VARNAME = "0.1.1"; const SPEEDX_VARCODE = 1; const SPEEDX_ARCHI_BOOTSTRAP = "SPEEDX_ARCHI_BOOTSTRAP"; const SPEEDX_ARCHI_SEMANTIC = "SPEEDX_ARCHI_SEMANTICUI"; const COMPACT_TO_STRING = 0;//用于函数speedxCompactJs(),此常量表示压缩后的js以字符串的方式返回; const COMPACT_TO_FILE = 1;//:用于函数speedxCompactJs(),此常量表示压缩后的js存储到指定的js文件;  const SPEEDX_REQUEST_GET = "SPEEDX_REQUEST_GET";  const SPEEDX_REQUEST_POST = "SPEEDX_REQUEST_POST"; /** * 格式化输出时每一行结尾要附加的字符 */ const SPEEDX_RN = ""; const SPEEDX_BR = "
"; const SPEEDX_NIL = ""; $SPEEDX_FORMAT_LINE_END = SPEEDX_NIL; /** * 格式化输出时新行前导字符 */ const SPEEDX_FORMAT_FIX_HTML = " "; const SPEEDX_FORMAT_FIX_SPACE = " "; $SPEEDX_FORMAT_LINE_HEAD = SPEEDX_NIL; /* ***异常处理类所用到的常定义: ***调用主文件:_SPEEDX_CLASS_PHP_/class.speedx_error_debuger.php */ const SPEEDX_STDOUT_NULL = 0; //信息屏蔽 const SPEEDX_STDOUT_SCREEN = 1;//信息输出至屏幕 const SPEEDX_STDOUT_FILE = 2;//信息输出至文件 const SPEEDX_STDOUT_WEBSOCKET = 3;//信息输出至后台管理员 const SPEEDX_STDOUT_DB = 4;//信息输出至数据库 const SPEEDX_DUBUG_DATATABLE = "exception"; //异常记录数据库表名称,表结构为固定结构,详见表定义 $_SPEEDX_DEBUGLOG = _SPEEDX_LOG_ . "speedx_debug.log"; $_DEBUG_TYPE = SPEEDX_STDOUT_FILE; //自定义异常输入方式,生产时请设置为:DEBUG_TO_LOG $_SPEEDX_ERRLOG = _SPEEDX_LOG_ . "speedx_error.log"; //自定义异常日志文件 $_ERR_TYPE = SPEEDX_STDOUT_FILE; //自定义异常输入方式,生产时请设置为:ERR_TO_LOG /** * speedx_domnodes类在解析时节点的状态 */ const SPEEDX_DOMNODE_TAG_START = 1;//解析节点需要起始标签 const SPEEDX_DOMNODE_TAG_END = 2;//解析节点需要结束标签 const SPEEDX_DOMNODE_CLOSE = 3;//解析节点禁止节点操作 /** * 自定义输入的错误级别 * 自定输出的信息不受全局环境设置影响,始终会输出到终端 */ const SPEEDX_ERR_LEVEL_NORMAL = 0; //常规信息 const SPEEDX_ERR_LEVEL_SUCCESS = 1; //突出信息 const SPEEDX_ERR_LEVEL_WARNING = 2; //警告信息 const SPEEDX_ERR_LEVEL_DANGER = 3; //危险信息 const SPEEDX_ERR_LEVEL_ERROR = 4; //错误信息 const SPEEDX_RETURN_OK = 1; //全局错误返回类中错误信息: 正确 const SPEEDX_RETURN_ERR = 0; //全局错误返回类中错误信息: 错误 const SPEEDX_RETURN_NODEFINE = -1;//全局错误返回类中错误信息: 未定义 /* ***speedx节点常量: ***调用主文件:_SPEEDX_CLASS_PHP_/class.speedx.php -> class speedx_node{} */ const SPEEDX_NODE_DOCTYPE = "_doctype_"; //doctype类型 const SPEEDX_NODE_STANDARD = "_standard_"; //标准对称标签 const SPEEDX_NODE_SINGLE = "_single_"; //单标签内容 const SPEEDX_NODE_META = "_meta_"; //meta标签 const SPEEDX_NODE_COMMENT = "_comment_"; //备注标签 const SPEEDX_NODE_TEXT = "_text_"; //文本内容 const SPEEDX_NODE_VAR = "_var_"; //变量标签,用于PHP内容替换 const SPEEDX_NODE_NULL = "_null_"; //空内容标签 const SPEEDX_NODE_STYLE = "_style_"; //style标签 const SPEEDX_NODE_SCRIPT = "_script_"; //脚本标签 const SPEEDX_NODE_PHP = "_php_"; //保留的:php脚本标签,用于后期扩展 const SPEEDXNODE_DOCTYPE = 1; const SPEEDXNODE_STANDARD = 2; const SPEEDXNODE_SINGLE = 4; const SPEEDXNODE_META = 8; const SPEEDXNODE_COMMENT = 16; const SPEEDXNODE_TEXT = 32; const SPEEDXNODE_VAR = 64; const SPEEDXNODE_STYLE = 128; const SPEEDXNODE_SCRIPT = 256; const SPEEDXNODE_PHP = 512; const SPEEDXNODE_NULL = 1024; /* ***doctype类型声明: *** */ const DOCTYPE_HTML5 = ''; const DOCTYPE_HTML_4_01_STRICT = ''; const DOCTYPE_HTML_4_01_TRANSITIONAL = ''; const DOCTYPE_HTML_4_01_FRAMESET = ''; const DOCTYPE_XHTML_1_0_STRICT = ''; const DOCTYPE_XHTML_1_0_TRANSITIONAL = ''; const DOCTYPE_XHTML_1_0_FRAMESET = ''; const DOCTYPE_XHTML_1_1 = ''; /* ***HTML标签列表 */ $SPEEDX_NODE_TYPE = []; $SPEEDX_NODE_TYPE[SPEEDX_NODE_DOCTYPE] = ["doctype
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值