PHP實現(xiàn)HTML標簽自動補全代碼
來源:易賢網(wǎng) 閱讀:2524 次 日期:2014-08-11 16:21:22
溫馨提示:易賢網(wǎng)小編為您整理了“PHP實現(xiàn)HTML標簽自動補全代碼”,方便廣大網(wǎng)友查閱!

般情況下先用PHP的 strip_tags 函數(shù)去掉所有html標簽,再去掉空格等,然后再用substr或者自己實現(xiàn)的cn_substr函數(shù)來實現(xiàn)截取。因為如果不先去掉html標簽,直接截取出來的字符串就會有沒有閉合的標簽出現(xiàn),有時甚至會截取在標簽上面比如

代碼如下:

</di ...

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

代碼如下:

<hr />

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

代碼如下:

<hr />

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

代碼如下:

div style="text-align:center">

content of page 1

<hr />

page 2 content

</div>

如果用explode函數(shù)分開后,

第一頁的內(nèi)容是

代碼如下:

<div style="text-align:center">

content of page 1

第二頁的內(nèi)容是:

代碼如下:

page 2 content

</div>

這樣就產(chǎn)生了沒有閉合的標簽,直接顯示到頁面上面就會破壞頁面布局。。。

想了很久,也找了網(wǎng)上很多 closetag函數(shù)。但是發(fā)現(xiàn)都針對第一頁那種沒有閉合的標簽的閉合。對于第二種沒有開頭的標簽就沒辦法了。

針對第一頁那種沒有閉合的標簽的閉合的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];

// 計算關閉開啟標簽數(shù)量,如果相同就返回html數(shù)據(jù)

$len_opened = count($openedtags);

if (count($closedtags) == $len_opened) {

return $html;

}

// 把排序數(shù)組,將最后一個開啟的標簽放在最前面

$openedtags = array_reverse($openedtags);

// 遍歷開啟標簽數(shù)組

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,寫入的內(nèi)容和得到的內(nèi)容是不一樣的噢。如果寫入不完整的html片段,瀏覽器會自動補全修正。讀取出來的時候就已經(jīng)是完整的html dom 片段了。

可是這樣有個弊端,由于是Js加載內(nèi)容信息的,會對搜索引擎優(yōu)化不好。

更多信息請查看IT技術專欄

更多信息請查看網(wǎng)絡編程
易賢網(wǎng)手機網(wǎng)站地址:PHP實現(xiàn)HTML標簽自動補全代碼

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網(wǎng)