PHP htmlspecialchars

PHP htmlspecialchars 函式的功能是能夠將特定的符號,轉換為 HTML 實體符號,解決偶爾發生因為 HTML 特殊標籤所造成的資料顯示問題,例如單引號(')、雙引號(")、大於(>)、小於(<)或字串連接符號(&)轉換成僅能顯示用的 HTML,為什麼會需要這樣的轉換呢?多半是為了安全,例如在網址或搜尋框中,輸入這些特殊符號,很可能觸發 Server 端的 PHP script 進行 MySQL 資料庫存取,透過 PHP htmlspecialchars 函式將存取前的資料先轉換,成為較安全的符號,避免掉一些不必要的資料存取動作所產生的非預期結果。

PHP htmlspecialchars 基本語法

string htmlspecialchars( $string , $quote_flags , $encoding , $double_encode )

參數表
$string必填項目,即為要轉換的字串
$quote_flags選填項目,用來設定引號的轉換規則,以下三項為常見的設定參數。
  • ENT_COMPAT - 預設值,轉換雙引號,不轉換單引號。
  • ENT_QUOTES - 轉換雙引號與單引號。
  • ENT_NOQUOTES - 單引號與雙引號都不轉換。
$encoding選擇項目,設定轉換的編碼,PHP 5.4.0 以前的版本預設編碼為 ISO-8859-1,而 PHP 5.4.0 以後的版本則預設為萬國碼 UTF-8。
$double_encode選擇項目,如果將此功能關閉,則 htmlspecialchars 不會轉換原本就存在的 HTML 符號,預設是全部轉換。

PHP htmlspecialchars 轉換結果
  • 字串連接符號(&)轉換為 &amp;
  • 雙引號(")轉換為 &quot;。前題是引號參數不能設定為 ENT_NOQUOTES。
  • 單引號(')轉換為 &#039;。只有在引號參數設定為 ENT_QUOTES 時,才會轉換單引號。
  • 大於符號(>)轉換為 &gt;
  • 小於符號(<)轉換為 &lt;
PHP htmlspecialchars 範例
<?php
$string_1 = htmlspecialchars("這是測試\'這是測試\"", ENT_COMPAT);
echo $string_1.'<br>';
$string_2 = htmlspecialchars("這是測試\'這是測試\"", ENT_QUOTES);
echo $string_2.'<br>';
$string_3 = htmlspecialchars("這是測試\'這是測試\"", ENT_NOQUOTES);
echo $string_3.'<br>';
?>
 以上輸出結果如
這是測試\'這是測試"
這是測試\'這是測試"
這是測試\'這是測試"
實際開啟網頁原始碼可以看到這樣的內容



上面原始碼的 <br> 代表 HTML 換行的意思,第一次輸出 $string_1 的轉換結果,由於設定了引號參數 ENT_COMPAT,所以只會轉換單引號,接著輸出 $string_2 時,引號參數設定為 ENT_QUOTES,所以單引號與雙引號都成功轉換,最後輸出 $string_3,引號參數設定為 ENT_NOQUOTES,代表遇到引號都不轉換。假設不設定引號參數,輸出結果將與預設值 ENT_COMPAT 的結果相同。

PHP htmlspecialchars 相關主題研究
© Copyright wibibi.com 網頁設計教學百科 基礎的網頁設計規劃、資料庫與程式設計 Since 2012 Englsih version
PHP Smarty MySQL JQuery Apache W3C