1. 程式人生 > >html 標籤與 html 實體轉換 與 php html 系列函式的簡單使用

html 標籤與 html 實體轉換 與 php html 系列函式的簡單使用

什麼是 html 標籤,html 實體

        看個簡單表格便知:
html標籤 描述 html實體
< less than &lt;
> great than &gt:

為什麼需要轉換

        更簡了,因為有時候我們需要在瀏覽器頁面中顯示 html 標籤,然而直接輸出<script>alert(1)</script>,在瀏覽頁面時將會被當作 html 標籤語言執行,解決方法就是將 html 標籤轉變為 html 實體再編寫到程式碼中,比如我們要顯示 <script> alert(1) </script>, 那麼我們的程式碼中應該這樣寫: &lt;script&gt;$nbspalert(1)&lt;/script&gt;。為什麼中間有個&nbsp;呢?因為細心的朋友可能已經發現了,我在 <script> 和 alert 中間有個空格,也就是說,&nbsp;就是空格的實體名稱。         看官可能會說了,既然程式碼 &lt;script&gt;$nbspalert(1)&lt;/script&gt; 顯示的是  <script> alert(1) </script>, 那麼如果要顯示 &lt;script&gt;$nbspalert(1)&lt;/script&gt; 又應該寫怎麼樣的程式碼呢。道理很簡單,一段 文字 ,如果在頁面中的顯示跟程式碼不一致,那說明肯定是裡面包含了html的關鍵字,比如上一段程式碼中就包含了關鍵字 & ,如果想要在瀏覽器中顯示 & (html 關鍵字) ,則需要在程式碼中用它對應的實體來替換掉,& 的實體為 &amp; , 因此要顯示 &lt;script&gt;$nbspalert(1)&lt;/script&gt;  ,需要的程式碼為 &amp;lt;script&amp;gt;$amp;nbspalert(1)&amp;lt;/script&amp;gt; 

php html  系列函式

        看了上面,你可能會覺得,哇,那每次都要換來換去,眼睛都看花了,有沒有什麼簡單又不會出錯的方法呢。答案是肯定的,人類這麼懶,什麼事情都會有簡便方法的。         php html 系列的函式有         以上四個函式都是以 html 為字首的,所以想想就知道和 html 標籤有關了。其中 html_entity_decode() 和 htmlspecialchars_decode() 是將html 實體轉換為 html 標籤的,htmlspecialchars() 和 htmlentities() 是將 html 標籤轉換為 html 實體的。        下面就來通過程式碼實現感受一下:
<?php
//首先宣告一個變數並將一個帶有html標籤的字串賦值給它
$a = "<script>alert(1);</script>
echo $a; //彈出一個彈出框
echo htmlentities($a); // 輸出 &lt;script&gt;$nbspalert(1)&lt;/script&gt; 瀏覽器中顯示 <script> alert(1) </script>
echo htmlspecialchars($a); //同上
echo htmlspecialchars(htmlspecialchars($a)); // 輸出 &amp;lt;script&amp;gt;$amp;nbspalert(1)&amp;lt;/script&amp;gt; 瀏覽器中顯示 &lt;script&gt;$nbspalert(1)&lt;/script&gt; 以此類推
$b = htmlspecialchars(htmlspecialchars($a)); //注意,實際上 $b 的值為&amp;lt;script&amp;gt;$amp;nbspalert(1)&amp;lt;/script&amp;gt; 
echo htmlspecialchars_decode($b); // 輸出 &lt;script&gt;$nbspalert(1)&lt;/script&gt; 瀏覽器中顯示 <script> alert(1) </script>
當然如果你覺得用了這兩個函式都是分不清輸出什麼,顯示什麼,沒關係,你可以採用php cli的方式(即命令列方式)執行一遍上述程式碼,輸出的內容不會被瀏覽器解釋,就是真實的值:
php > $a = "<script> alert(1);</script>";
php > echo $a;
<script> alert(1);</script>
php > echo htmlentities($a);
<script> alert(1);</script>
php > echo htmlspecialchars($a);
<script> alert(1);</script>
php > echo htmlspecialchars(htmlspecialchars($a));
&lt;script&gt; alert(1);&lt;/script&gt;
php > echo $b;
amp;lt;script&gt; alert(1);&lt;/script&gt;
php > $b = "&lt;script&gt; alert(1);&lt;/script&gt;";
php > echo html_entity_decode(html_entity_decode($b));
<script> alert(1);</script>
php > 

而在瀏覽器中上述輸出會被瀏覽器解釋一遍,即為我們所言的顯示的值。