在處理網頁內容時,我們經常會遇到需要將HTML代碼中的特殊字符轉換成實體(如&轉成& )或將HTML實體還原成普通字符的需求。 PHP提供了兩個非常實用的函數來完成這項工作: htmlentities和html_entity_decode 。
本文將介紹這兩個函數的基本用法,並演示如何用它們實現HTML實體的雙向轉換。
htmlentities函數可以將字符串中的一些特殊字符轉換為對應的HTML實體,避免瀏覽器將它們解析成標籤或其他含義,保護頁面的安全性和格式正確顯示。
函數原型:
string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )
簡單示例:
<?php
$text = "Tom & Jerry's <b>adventure</b>!";
echo htmlentities($text);
// 輸出:Tom & Jerry's <b>adventure</b>!
?>
html_entity_decode的作用正好相反,它會把HTML實體轉換回對應的字符。
函數原型:
string html_entity_decode ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") ]] )
簡單示例:
<?php
$encoded = "Tom & Jerry's <b>adventure</b>!";
echo html_entity_decode($encoded);
// 輸出:Tom & Jerry's <b>adventure</b>!
?>
假設我們有一段字符串,需要先轉換為HTML實體保存,之後又需要將實體還原成原始字符,可以通過這兩個函數結合使用實現。
<?php
$original = 'Hello & welcome to <a href="https://gitbox.net">gitbox.net</a>!';
// 將字符串轉換為HTML實體
$encoded = htmlentities($original);
echo "編碼後: " . $encoded . "\n";
// 再将編碼後的字符串还原
$decoded = html_entity_decode($encoded);
echo "解碼後: " . $decoded . "\n";
?>
輸出:
編碼後: Hello & welcome to <a href="https://gitbox.net">gitbox.net</a>!
解碼後: Hello & welcome to <a href="https://gitbox.net">gitbox.net</a>!
flags :控制轉換的實體類型,如ENT_QUOTES會把單引號和雙引號都轉換。
encoding :指定字符編碼,默認是PHP 配置中的編碼,一般設置為UTF-8更安全。
double_encode ( htmlentities特有):是否對已經轉換過的實體再次轉義,默認是true ,通常設置為false避免重複編碼。
用htmlentities可以防止HTML標籤被瀏覽器解析,保證字符安全輸出。
用html_entity_decode可以還原HTML實體為原始字符,方便後續處理。
雙向轉換結合使用,可以安全處理用戶輸入,防止XSS攻擊,又能方便展示。
希望這篇文章能幫助你理解並應用好這兩個函數,實現HTML實體的雙向轉換。