PHP的escape函數通常用于將特殊字符轉換成HTML實體,以避免被瀏覽器解析或攻擊。但有時候我們也需要將這些轉義后的實體字符進行解密,恢復成原始字符。
例如,我們有一個字符串<p>Hello & World</p>,在經過PHP的escape函數轉換后就變成了<p>Hello & World</p>。如果我們想將其還原成原本的字符串,可以使用PHP的htmlspecialchars_decode函數。
$escaped_string = "<p>Hello & World</p>"; $decoded_string = htmlspecialchars_decode($escaped_string); echo $decoded_string; // 輸出Hello & World
可以看到,由于原字符串中包含有 & 這個HTML實體字符,如果直接使用PHP的html_entity_decode函數解密,會導致 & 被誤認為是一個實體字符中的 '&' 符號,因此不能完整解密。
除了htmlspecialchars_decode函數,PHP還提供了另外兩個解密函數:html_entity_decode和rawurldecode。
html_entity_decode函數是用于解密HTML實體字符的,例如 < 和 & 等。如果我們有一個字符串 "1 < 2",經過escape函數轉換后變成了 "1 < 2",可以用html_entity_decode函數解密:
$escaped_string = "1 < 2"; $decoded_string = html_entity_decode($escaped_string); echo $decoded_string; // 輸出:1 < 2
rawurldecode函數則是用于解密URL編碼的字符串,例如 %20 和 %2E 等。如果我們有一個字符串 "Hello%20World%2Ephp",經過escape函數轉換后變成了 "Hello%2520World%252Ephp",可以用rawurldecode函數解密:
$escaped_string = "Hello%2520World%252Ephp"; $decoded_string = rawurldecode($escaped_string); echo $decoded_string; // 輸出:Hello World.php
總之,PHP的escape函數和解密函數非常實用,可以有效地避免PHP應用中的安全問題,也能更方便地進行URL和HTML的編碼、解碼工作。