1. 程式人生 > >淺析PHP中處理HTML特殊字符轉換

淺析PHP中處理HTML特殊字符轉換

order charset body special 前臺 regular 混亂 base ble

我們在用PHP處理頁面顯示內容時,經常會遇到一些特殊字符轉換問題,如果處理不當就會導致頁面顯示混亂,不能得到目標效果。所以本文我們將和大家一起歸納總結PHP中處理HTML特殊字符轉換的常用方法。

HTML實體字符

我們知道HTML中有許多特殊的預留字符不能直接輸出到瀏覽器,必須把它們替換為相應的實體字符才可以正常顯示,比如空格、<、>等。

HTML常用字符實體一覽:

技術分享
圖片來源:http://www.w3school.com.cn/html/html_entities.asp

我們在寫HTML代碼時,可以直接在代碼中將想顯示的特殊字符寫成實體字符:

 1 <html>
 2
<head> 3 <meta charset="utf-8"> 4 </head> 5 <body> 6 <h3>HTML中超鏈接a標簽是這個樣子的:</h3> 7 <p>&lt;a href=&#039;http://www.chanzhi.org&#039;&gt;蟬知企業門戶系統&lt;/a&gt;</p> 8 9 </body> 10 </html>

顯示效果如下:

技術分享

htmlentities()

在寫PHP代碼時,不能在字符串中直接寫實體字符,PHP提供了一個將HTML特殊字符轉換成實體字符的函數

htmlentities()

註:htmlentities()並不能轉換所有的特殊字符,是轉換除了空格之外的特殊字符,且單引號和雙引號需要單獨控制(通過第二個參數)。

第二個參數有三個值:

ENT_COMPAT(默認值):只轉換雙引號。

ENT_QUOTES:兩種引號都轉換。

ENT_NOQUOTES:兩種引號都不轉換。

(沒有只轉換單引號的參數選項)

1 <?php
2 $str = "<a href=‘http://www.chanzhi.org‘>蟬知企業門戶系統?</a>";
3 
4 //使用htmlentities()函數將特殊字符轉換為實體字符
5 $str2
= htmlentities($str); 6 7 echo $str2; 8 ?>

運行後前臺顯示特殊字符正常,右擊查看頁面源代碼,可以看到PHP轉換後的實體字符內容。

技術分享

前臺瀏覽器顯示

技術分享

查看頁面源代碼

htmlspecialchars()

htmlspecialchars()函數只對HTML語法字符進行轉換,目的是避免這些特殊的字符擾亂HTML代碼。
這裏說的 HTML語法字符 只有5個:

顯示結果描述實體名稱
< 小於號 &lt;
> 大於號 &gt;
& 和號 &amp;
" 雙引號 &quot;
單引號 &apos;


htmlspecialchars()將其轉換成與其對應的實體字符。

我們還是以上面代碼為例,對比htmlentities和htmlspecialchars查看下效果:

1 <?php
2 $str = "<a href=‘http://www.chanzhi.org‘>蟬知企業門戶系統?</a>";
3 
4 //使用htmlspecialchars()函數將特殊字符轉換為實體字符
5 $str2 = htmlspecialchars($str);
6 
7 echo $str2;
8 ?>

運行效果如下:

技術分享

前臺瀏覽器顯示

技術分享

查看頁面源代碼

可以看到,htmlspecialchars只對上面5個特殊語法字符其作用,其他的特殊字符不進行轉換。

小結:

本文我們一起學習了解了PHP處理HTML中特殊字符的方法。對比htmlentities和htmlspecialchars兩個PHP函數的功能作用。如果大家對於字符處理還有其他疑問,歡迎和大家一起分享交流,我們共同學習,共同交流,共同進步。

技術分享

淺析PHP中處理HTML特殊字符轉換