php去除html标签_用PHP操作DOM (一)
從事PHP開發(fā)很多年了,也寫過些小項(xiàng)目,經(jīng)常要在后臺(tái)生成前端輸出的HTML腳本,說白了就是把HTML語言以字符串的方式嵌入在PHP的輸入語句中,單純的輸出沒什么問題,但遇到DOM修改時(shí)很是麻煩,要做各種查找與替換,還要寫一大堆正則,反反復(fù)復(fù),效率極低。也用過網(wǎng)上的一些PHP操作DOM的開源項(xiàng)目,不過問題多多,要么就停更很久了,要么不完善,我在寫代碼這個(gè)問題上是個(gè)不將就的人,所以,就自己想整一個(gè)這么個(gè)項(xiàng)目,我的目的很簡(jiǎn)單,就是要在PHP里操作DOM就像Jquery一樣,能生成,能解析,還要能符合目前H5及CSS3的特性。我準(zhǔn)備花點(diǎn)時(shí)間來記錄這一過程,應(yīng)該要分幾個(gè)章節(jié)來寫,我的環(huán)境是LAMP,PHP基于PHP7.3版本。先來說一下書寫規(guī)則。對(duì)了,這是我在簡(jiǎn)書上寫的第一篇文章,所以態(tài)度上我是很認(rèn)真的。我給這個(gè)項(xiàng)目取名叫SPEEDX,很多命名前綴我會(huì)帶上這個(gè)項(xiàng)目名,為什么呢,因?yàn)镻HP中我特別不喜歡命名空間這么個(gè)玩意,不知為什么,性格如此。
往往想象很美好的事情,現(xiàn)實(shí)確很骨感。為了達(dá)到對(duì)DOM及CSS精準(zhǔn)操作的目的,不搞大雜會(huì),為此我仔細(xì)分析了一下,本項(xiàng)目操作主要對(duì)像應(yīng)該這樣分類:1. CSS類:`.className{屬性列表}`
2. CSS屬性 : `vName: value`
3. DOM標(biāo)簽 諸如`
4. DOM屬性,如: `
5. DOM節(jié)點(diǎn)基本內(nèi)容: 就是節(jié)點(diǎn)內(nèi)的內(nèi)容,也可以人包含其它節(jié)點(diǎn)
為此,我弄了個(gè)比較詳細(xì)的config文件,其中定義的HTML及CSS中所用的標(biāo)簽、屬性及相關(guān)瀏覽器的支持情況。其中重要的幾項(xiàng)常量定義我做一下說明:
- SPEEDX_STYLE_NULL = 0;//CSS3標(biāo)準(zhǔn),但還沒有瀏覽器實(shí)現(xiàn)
- SPEEDX_STYLE_W3C = 1; //W3C標(biāo)準(zhǔn)屬性:表示支持這一屬性或支持這一屬性值的瀏覽器都是采用標(biāo)準(zhǔn)格式,即不帶瀏覽器前綴的書寫方式;
- SPEEDX_STYLE_MOZ = 2; //火狐瀏覽器內(nèi)核(-moz-):表示支持這一屬性或?qū)傩灾档幕鸷鼮g覽器在書寫格式上要帶"-moz-"前綴;
- SPEEDX_STYLE_WEBKIT = 4; //Chrome和Safari瀏覽器內(nèi)核:表示支持這一屬性或?qū)傩灾档臑g覽器在CSS書寫格式上要帶"-webkit-"前綴;
- SPEEDX_STYLE_MS = 8; //IE瀏覽器內(nèi)核:IE支持的CSS特性,要加"-ms-"前綴
- SPEEDX_STYLE_O = 16; //Opera瀏覽器內(nèi)核:對(duì)于兼容部分Opera瀏覽器,CSS特性前要加"-o-"前綴
- SPEEDX_STYLE_ALL = 31; //所有兼容模式,為了兼容大部分主流瀏覽器的不同版本,要加上上面所有的前綴。
具體配置如下:文件中已備注說明:
<?php /** * speedx版本及版本號(hào) */ 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;//用于函數(shù)speedxCompactJs(),此常量表示壓縮后的js以字符串的方式返回; const COMPACT_TO_FILE = 1;//:用于函數(shù)speedxCompactJs(),此常量表示壓縮后的js存儲(chǔ)到指定的js文件; const SPEEDX_REQUEST_GET = "SPEEDX_REQUEST_GET"; const SPEEDX_REQUEST_POST = "SPEEDX_REQUEST_POST"; /** * 格式化輸出時(shí)每一行結(jié)尾要附加的字符 */ const SPEEDX_RN = ""; const SPEEDX_BR = ""; const SPEEDX_NIL = ""; $SPEEDX_FORMAT_LINE_END = SPEEDX_NIL; /** * 格式化輸出時(shí)新行前導(dǎo)字符 */ const SPEEDX_FORMAT_FIX_HTML = " "; const SPEEDX_FORMAT_FIX_SPACE = " "; $SPEEDX_FORMAT_LINE_HEAD = SPEEDX_NIL; /* ***異常處理類所用到的常定義: ***調(diào)用主文件:_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;//信息輸出至后臺(tái)管理員 const SPEEDX_STDOUT_DB = 4;//信息輸出至數(shù)據(jù)庫 const SPEEDX_DUBUG_DATATABLE = "exception"; //異常記錄數(shù)據(jù)庫表名稱,表結(jié)構(gòu)為固定結(jié)構(gòu),詳見表定義 $_SPEEDX_DEBUGLOG = _SPEEDX_LOG_ . "speedx_debug.log"; $_DEBUG_TYPE = SPEEDX_STDOUT_FILE; //自定義異常輸入方式,生產(chǎn)時(shí)請(qǐng)?jiān)O(shè)置為:DEBUG_TO_LOG $_SPEEDX_ERRLOG = _SPEEDX_LOG_ . "speedx_error.log"; //自定義異常日志文件 $_ERR_TYPE = SPEEDX_STDOUT_FILE; //自定義異常輸入方式,生產(chǎn)時(shí)請(qǐng)?jiān)O(shè)置為:ERR_TO_LOG /** * speedx_domnodes類在解析時(shí)節(jié)點(diǎn)的狀態(tài) */ const SPEEDX_DOMNODE_TAG_START = 1;//解析節(jié)點(diǎn)需要起始標(biāo)簽 const SPEEDX_DOMNODE_TAG_END = 2;//解析節(jié)點(diǎn)需要結(jié)束標(biāo)簽 const SPEEDX_DOMNODE_CLOSE = 3;//解析節(jié)點(diǎn)禁止節(jié)點(diǎn)操作 /** * 自定義輸入的錯(cuò)誤級(jí)別 * 自定輸出的信息不受全局環(huán)境設(shè)置影響,始終會(huì)輸出到終端 */ const SPEEDX_ERR_LEVEL_NORMAL = 0; //常規(guī)信息 const SPEEDX_ERR_LEVEL_SUCCESS = 1; //突出信息 const SPEEDX_ERR_LEVEL_WARNING = 2; //警告信息 const SPEEDX_ERR_LEVEL_DANGER = 3; //危險(xiǎn)信息 const SPEEDX_ERR_LEVEL_ERROR = 4; //錯(cuò)誤信息 const SPEEDX_RETURN_OK = 1; //全局錯(cuò)誤返回類中錯(cuò)誤信息: 正確 const SPEEDX_RETURN_ERR = 0; //全局錯(cuò)誤返回類中錯(cuò)誤信息: 錯(cuò)誤 const SPEEDX_RETURN_NODEFINE = -1;//全局錯(cuò)誤返回類中錯(cuò)誤信息: 未定義 /* ***speedx節(jié)點(diǎn)常量: ***調(diào)用主文件:_SPEEDX_CLASS_PHP_/class.speedx.php -> class speedx_node{} */ const SPEEDX_NODE_DOCTYPE = "_doctype_"; //doctype類型 const SPEEDX_NODE_STANDARD = "_standard_"; //標(biāo)準(zhǔn)對(duì)稱標(biāo)簽 const SPEEDX_NODE_SINGLE = "_single_"; //單標(biāo)簽內(nèi)容 const SPEEDX_NODE_META = "_meta_"; //meta標(biāo)簽 const SPEEDX_NODE_COMMENT = "_comment_"; //備注標(biāo)簽 const SPEEDX_NODE_TEXT = "_text_"; //文本內(nèi)容 const SPEEDX_NODE_VAR = "_var_"; //變量標(biāo)簽,用于PHP內(nèi)容替換 const SPEEDX_NODE_NULL = "_null_"; //空內(nèi)容標(biāo)簽 const SPEEDX_NODE_STYLE = "_style_"; //style標(biāo)簽 const SPEEDX_NODE_SCRIPT = "_script_"; //腳本標(biāo)簽 const SPEEDX_NODE_PHP = "_php_"; //保留的:php腳本標(biāo)簽,用于后期擴(kuò)展 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標(biāo)簽列表 */ $SPEEDX_NODE_TYPE = []; $SPEEDX_NODE_TYPE[SPEEDX_NODE_DOCTYPE] = ["doctype
總結(jié)
以上是生活随笔為你收集整理的php去除html标签_用PHP操作DOM (一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么有的行车记录仪得连接数据线?
- 下一篇: python自动测试g_Python自动