在網頁開發中,我們經常會遇到需要去除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-tw/n/139423.html
微信掃一掃
支付寶掃一掃