校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > PHP實現HTML標簽自動補全代碼

PHP實現HTML標簽自動補全代碼

熱門標簽:無錫電銷機器人銷售 招聘信息 揭陽外呼系統公司 地圖標注植物名稱 福建ai電銷機器人加盟公司 南召400電話辦理資費 地圖標注審核工作怎么樣注冊 鄭州中國移動400電話申請 熱血傳奇沃瑪森林地圖標注 去哪里辦卡
一般情況下先用PHP的 strip_tags 函數去掉所有html標簽,再去掉空格等,然后再用substr或者自己實現的cn_substr函數來實現截取。因為如果不先去掉html標簽,直接截取出來的字符串就會有沒有閉合的標簽出現,有時甚至會截取在標簽上面比如
復制代碼 代碼如下:
/di ...

今天遇到一個內容翻頁截取問題: 正文是用富文本編輯器寫入的,編輯器上有個分頁按鈕,點擊之后就往當前光標位置插入一個藍色的

復制代碼 代碼如下:
hr />

橫線。然后php直接存入數據庫。顯示的時候,用 explode 函數根據這個

復制代碼 代碼如下:
hr />

標記來分成一個數組,然后根據當前頁碼來顯示某個片段。 但是有個嚴重的問題,比如富文本編輯器寫入:

復制代碼 代碼如下:

div style="text-align:center">
content of page 1
hr />
page 2 content
/div>

如果用explode函數分開后,
第一頁的內容是

復制代碼 代碼如下:

div style="text-align:center">

content of page 1
第二頁的內容是:

復制代碼 代碼如下:

page 2 content
/div>

這樣就產生了沒有閉合的標簽,直接顯示到頁面上面就會破壞頁面布局。。。
想了很久,也找了網上很多 closetag函數。但是發現都針對第一頁那種沒有閉合的標簽的閉合。對于第二種沒有開頭的標簽就沒辦法了。

針對第一頁那種沒有閉合的標簽的閉合的closetags方法是:
復制代碼 代碼如下:

function closetags($html) {
// 不需要補全的標簽
$arr_single_tags = array('meta', 'img', 'br', 'link', 'area');
// 匹配開始標簽
preg_match_all('#([a-z]+)(?: .*)?(?![/|/ ])>#iU', $html, $result);
$openedtags = $result[1];
// 匹配關閉標簽
preg_match_all('#/([a-z]+)>#iU', $html, $result);
$closedtags = $result[1];
// 計算關閉開啟標簽數量,如果相同就返回html數據
$len_opened = count($openedtags);
if (count($closedtags) == $len_opened) {
return $html;
}
// 把排序數組,將最后一個開啟的標簽放在最前面
$openedtags = array_reverse($openedtags);
// 遍歷開啟標簽數組
for ($i = 0; $i $len_opened; $i++) {
// 如果需要補全的標簽
if (!in_array($openedtags[$i], $arr_single_tags)) {
// 如果這個標簽不在關閉的標簽中
if (!in_array($openedtags[$i], $closedtags)) {
// 直接補全閉合標簽
$html .= '/' . $openedtags[$i] . '>';
} else {
unset($closedtags[array_search($openedtags[$i], $closedtags)]);
}
}
}
return $html;
}

后來想了一個辦法,利用瀏覽器自己的html解釋引擎來幫助補全有問題的html片段。具體做法如下:

復制代碼 代碼如下:

script>
var div = document.createElement('div');
div.innerHTML ='?php echo ("div>這里是被截取的html片段");?>';
document.write(div.innerHTML);
/script>


原理就是先把html片段寫入到一個空的div里面,然后再從這個div里面讀取出來。別看寫入和讀取的屬性都是innerHTML,寫入的內容和得到的內容是不一樣的噢。如果寫入不完整的html片段,瀏覽器會自動補全修正。讀取出來的時候就已經是完整的html dom 片段了。
可是這樣有個弊端,由于是Js加載內容信息的,會對搜索引擎優化不好。
您可能感興趣的文章:
  • php截取html字符串及自動補全html標簽的方法
  • php使HTML標簽自動補全閉合函數代碼
  • PHP正則表達式過濾html標簽屬性(DEMO)
  • PHP實現過濾各種HTML標簽
  • php過濾表單提交的html等危險代碼
  • php過濾HTML標簽、屬性等正則表達式匯總
  • 淺析php過濾html字符串,防止SQL注入的方法
  • php正則過濾html標簽、空格、換行符的代碼(附說明)
  • php 正則 過濾html 的超鏈接
  • php完全過濾HTML,JS,CSS等標簽
  • PHP實現網頁內容html標簽補全和過濾的方法小結【2種方法】

標簽:文山 南昌 鹽城 東莞 宣城 景德鎮 黔南 桂林

巨人網絡通訊聲明:本文標題《PHP實現HTML標簽自動補全代碼》,本文關鍵詞  PHP,實現,HTML,標簽,自動,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP實現HTML標簽自動補全代碼》相關的同類信息!
  • 本頁收集關于PHP實現HTML標簽自動補全代碼的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 宁安市| 永宁县| 安国市| 祁连县| 东乌珠穆沁旗| 芷江| 邳州市| 敦煌市| 正宁县| 农安县| 太仓市| 堆龙德庆县| 隆化县| 双流县| 咸丰县| 新巴尔虎左旗| 镇远县| 吴桥县| 松原市| 容城县| 涟源市| 台东县| 将乐县| 德化县| 清河县| 托克托县| 成都市| 瓮安县| 郑州市| 衡南县| 涿鹿县| 莱州市| 合水县| 大安市| 金门县| 贵德县| 师宗县| 称多县| 壤塘县| 平凉市| 陇川县|