html 標籤與 html 實體轉換 與 php html 系列函式的簡單使用
阿新 • • 發佈:2019-02-20
什麼是 html 標籤,html 實體
看個簡單表格便知:html標籤 | 描述 | html實體 |
< | less than | < |
> | great than | >: |
為什麼需要轉換
更簡了,因為有時候我們需要在瀏覽器頁面中顯示 html 標籤,然而直接輸出<script>alert(1)</script>,在瀏覽頁面時將會被當作 html 標籤語言執行,解決方法就是將 html 標籤轉變為 html 實體再編寫到程式碼中,比如我們要顯示 <script> alert(1) </script>, 那麼我們的程式碼中應該這樣寫: <script>$nbspalert(1)</script>。為什麼中間有個 呢?因為細心的朋友可能已經發現了,我在 <script> 和 alert 中間有個空格,也就是說, 就是空格的實體名稱。 看官可能會說了,既然程式碼 <script>$nbspalert(1)</script> 顯示的是 <script> alert(1) </script>, 那麼如果要顯示 <script>$nbspalert(1)</script> 又應該寫怎麼樣的程式碼呢。道理很簡單,一段 文字 ,如果在頁面中的顯示跟程式碼不一致,那說明肯定是裡面包含了html的關鍵字,比如上一段程式碼中就包含了關鍵字 & ,如果想要在瀏覽器中顯示 & (html 關鍵字) ,則需要在程式碼中用它對應的實體來替換掉,& 的實體為 & , 因此要顯示 <script>$nbspalert(1)</script> ,需要的程式碼為 &lt;script&gt;$amp;nbspalert(1)&lt;/script&gt;php html 系列函式
當然如果你覺得用了這兩個函式都是分不清輸出什麼,顯示什麼,沒關係,你可以採用php cli的方式(即命令列方式)執行一遍上述程式碼,輸出的內容不會被瀏覽器解釋,就是真實的值:<?php //首先宣告一個變數並將一個帶有html標籤的字串賦值給它 $a = "<script>alert(1);</script> echo $a; //彈出一個彈出框 echo htmlentities($a); // 輸出 <script>$nbspalert(1)</script> 瀏覽器中顯示 <script> alert(1) </script> echo htmlspecialchars($a); //同上 echo htmlspecialchars(htmlspecialchars($a)); // 輸出 &lt;script&gt;$amp;nbspalert(1)&lt;/script&gt; 瀏覽器中顯示 <script>$nbspalert(1)</script> 以此類推 $b = htmlspecialchars(htmlspecialchars($a)); //注意,實際上 $b 的值為&lt;script&gt;$amp;nbspalert(1)&lt;/script&gt; echo htmlspecialchars_decode($b); // 輸出 <script>$nbspalert(1)</script> 瀏覽器中顯示 <script> alert(1) </script>
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)); <script> alert(1);</script> php > echo $b; amp;lt;script> alert(1);</script> php > $b = "<script> alert(1);</script>"; php > echo html_entity_decode(html_entity_decode($b)); <script> alert(1);</script> php >
而在瀏覽器中上述輸出會被瀏覽器解釋一遍,即為我們所言的顯示的值。