在PHP的開發過程中,我們往往需要對寫入的數據或讀取數據庫的數據進行過濾后再進行寫入或是讀取。這樣可以大大提高網站的整體安全性,預防一些非法的注入操作等。

今天就說一說,PHP中如何把預定義的字符串轉換成HTML實體,來防止一些垃圾數據的提交。

PHP htmlspecialchars() 函數

htmlspecialchars():可以把預定義的字符轉換為 HTML 實體。

語法:

htmlspecialchars(string,flags,character-set,double_encode)

參數:

string:必需。規定要轉換的字符串。

国产视频appflags:可選,規定如何處理引號、無效的編碼以及使用哪種文檔類型,如ENT_COMPAT、ENT_QUOTES、ENT_NOQUOTES

character-set:可選,顧名思義字符集,默認utf-8,當然支持很多編碼,這里不列舉

double_encode:可選,一個規定了是否編碼已存在的 HTML 實體的布爾值。

例:PHP 輸出轉義后的html標簽

示例1:

<?php
//飛鳥慕魚博客
$str = "這是我的博客,網址是: <b>http://xswdd.cn</b>";
//這里直接輸出字符
echo $str;
echo '<br/>';
//輸出轉義后的字符
echo htmlspecialchars($str);
?>

国产视频app輸出結果,如下圖所示:

QQ截圖20190709122721.jpg

示例2:

<?php
//飛鳥慕魚博客
$str = '這是我的博客,網址是: <span style="color:red;">http://xswdd.cn</span>';
//這里直接輸出字符
echo $str;
echo '<br/>';
//輸出轉義后的字符
echo htmlspecialchars($str);
?>

輸出結果,如下圖所示:

QQ截圖20190709123839.jpg

注意:

1、在沒有使用 htmlspecialchars() 函數前,字符串中的<b></b>是會被瀏覽器解析的

国产视频app2、使用 htmlspecialchars() 函數后,字符串中<b></b>標簽會被轉義成實體,被HTML輸出

国产视频app3、上面的代碼主要作用是: < (小于號)成為 <,>(大于號)成為 >

例:PHP 把雙引號轉換成HTML實體

示例1:

<?php
//飛鳥慕魚博客
$str = '早安,世界!新的一天開始了,你做好"出去"準備了么?';
//這里直接輸出字符
echo $str;
echo '<br/>';
//輸出轉義后的字符
echo htmlspecialchars($str,ENT_QUOTES);
?>

輸出結果:

早安,世界!新的一天開始了,你做好"出去"準備了么?
早安,世界!新的一天開始了,你做好"出去"準備了么?

查看源碼結果:

早安,世界!新的一天開始了,你做好"出去"準備了么?
<br/>
早安,世界!新的一天開始了,你做好&quot;出去&quot;準備了么?

注意:

1、通過查看源碼可以發現,htmlspecialchars()函數把 "(雙引號)轉化了 &quot;

2、如果雙引號的轉換,htmlspecialchars() 函數的第二個參數應該設置為 ENT_QUOTES(轉換雙引號和單引號)

例:PHP把單引號轉換成HTML實體

示例代碼:

<?php
//飛鳥慕魚博客
$str = "早安,'my words'!";
//這里直接輸出字符
echo $str;
echo '<br/>';
//輸出轉義后的字符
echo htmlspecialchars($str,ENT_QUOTES);
?>

輸出結果:

早安,'my words'!
早安,'my words'!

查看源碼的結果:

早安,'my words'!<br/>
早安,&#039;my words&#039;!

注意:

1、php htmlspecialchars()函數會把單引號轉換成 &#039;,并被瀏覽器輸出

2、轉換單號碼,htmlspecialchars()函數的第二個參數值為 ENT_QUOTES(轉換雙引號和單引號)

補充:

HTML實體是什么?

1、在 HTML 中,某些字符是預留的。

国产视频app2、在 HTML 中不能使用小于號(<)和大于號(>),這是因為瀏覽器會誤認為它們是標簽,當然在HTML中還有其他實體

3、如果希望正確地顯示預留字符,我們必須在HTML源代碼中使用字符實體(character entities)。

4、如需顯示小于號,我們必須這樣寫:< 或 <使用實體名而不是數字的好處是,名稱易于記憶。不過壞處是,瀏覽器也許并不支持所有實體名稱(對實體數字的支持卻很好)。

預定義的字符有哪些?

1、& (和號)成為 &

2、” (雙引號)成為 ”

国产视频app3、’ (單引號)成為 ‘

4、< (小于)成為 < > (大于)成為 >