在網頁開發中,我們經常會遇到需要去除HTML標記的情況。例如,在發佈文章時需要將用戶寫的富文本去除HTML標籤,只顯示純文本內容。在這種情況下,PHP提供了一個很方便的函數——strip_tags(),它可以將HTML標記從字符串中刪除。
一、strip_tags()函數的基本用法
strip_tags()函數基本用法非常簡單。它只接受一個參數——要處理的字符串,然後返回一個刪除HTML標記後的字符串。
<?php $str = '<p>這是一段<b>加粗</b><a href="http://www.baidu.com">鏈接</a>的<br>HTML</p>'; echo strip_tags($str); ?>
輸出結果:
這是一段加粗鏈接的HTML
可以看到,在這個例子中輸入的HTML字符串包括<p>、<b>、<a>和<br>這些標記,但輸出結果中這些標記都被刪除了。
二、指定允許的標籤
strip_tags()函數默認會刪除所有的HTML標記,但有時我們需要保留某些標記,例如圖片或鏈接標記。strip_tags()函數提供了一個可選參數,可以用來指定允許保留的標記。
<?php $str = '<p>這是一段<b>加粗</b><a href="http://www.baidu.com">鏈接</a>和<img src="img.jpg">圖片</p>'; $allow_tags = '<b><a>'; echo strip_tags($str, $allow_tags); ?>
輸出結果:
這是一段<b>加粗</b><a href="http://www.baidu.com">鏈接</a>和圖片
在這個例子中,我們指定了允許保留的標籤為<b>和<a>,結果中其他標記都被刪除了。
三、指定允許的標籤和屬性
除了指定允許保留的標記外,strip_tags()函數還可以指定允許保留的標記中的特定屬性。例如,在img標記中,我們只需要保留src屬性,其他的屬性都可以刪除。
<?php $str = '<p>這是一段<b>加粗</b><a href="http://www.baidu.com">鏈接</a>和<img src="img.jpg" alt="一張圖片">圖片</p>'; $allow_tags = '<b><a><img>'; $allow_attrs = array('src'); echo strip_tags($str, $allow_tags . $allow_attrs); ?>
輸出結果:
這是一段<b>加粗</b><a href="http://www.baidu.com">鏈接</a>和<img src="img.jpg">圖片
在這個例子中,我們除了指定允許保留的標記為<b>、<a>和<img>外,還指定了允許<img>標記保留的屬性為src,其他的屬性都被刪除了。
四、考慮安全性問題
雖然strip_tags()函數非常方便,但要注意它可能引起的安全性問題。由於strip_tags()函數只能刪除標記,而不能驗證標記的合法性,因此有可能會將惡意腳本保留下來,並在瀏覽器中執行。為了避免這種情況,我們應該採用其他的措施,如過濾用戶輸入或使用專業的安全庫。
五、綜合應用範例
以下是一個綜合應用strip_tags()函數的範例,它可以去除用戶輸入的HTML標記,並且可以指定允許保留的標記和屬性。
<?php function filter_html($str, $allow_tags = '', $allow_attrs = array()) { // 去除HTML標記 $str = strip_tags($str, $allow_tags); // 去除HTML屬性 if (!empty($allow_attrs)) { $dom = new DOMDocument(); @$dom->loadHTML('' . $str); $tags = $dom->getElementsByTagName('*'); foreach ($tags as $tag) { $attrs = $tag->attributes; if (!is_null($attrs)) { for ($i = 0; $i length; $i++) { $attr = $attrs->item($i); $name = $attr->nodeName; if (!in_array($name, $allow_attrs)) { $tag->removeAttributeNode($attr); } } } } $str = $dom->saveXML($dom->documentElement); } return $str; } $str = '<p>這是一段<b>加粗</b><a href="http://www.baidu.com">鏈接</a>和<img src="img.jpg" alt="一張圖片">圖片</p>'; $allow_tags = '<b><a><img>'; $allow_attrs = array('src'); echo filter_html($str, $allow_tags, $allow_attrs); ?>
輸出結果:
這是一段<b>加粗</b><a href="http://www.baidu.com">鏈接</a>和<img src="img.jpg">圖片
在這個範例中,我們定義了一個filter_html()函數,它可以去除HTML標記和屬性,其中$allow_tags和$allow_attrs分別是允許保留的標記和屬性數組。這個函數可以應用在需要保證網站安全性的場合,例如用戶評論或留言功能中。
原創文章,作者:AULB,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/139423.html