程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 正確理解PHP轉義的真正含義

正確理解PHP轉義的真正含義

編輯:關於PHP編程

如何正確的理解

在PHP中默認有一個"魔術引號"的開關, 如果這個開關打開, 從外部轉入的$_GET, $_GET, $COOKIE都會PHP轉義.
比如:

http://localhost/test.PHP?test=1'

然後在test.PHP輸出時自動轉義, 輸出如下:

var_dump($_GET['test'];

========output=======
string(3) "1'"

所示 ' 號被加入了轉義了.但這裡有一個問題, 當將這個值輸出到網頁時會看到滿屏的, 這裡可以使用另一個函數, stripslashes 可以將去除.

在手冊中的PHP轉義意思是說推薦不要開啟"魔術引號" 因為效率問題, 不這也有一個好處, 就是可以非常安全, 對於我這樣的新手來說.
關閉"魔術引號有三個方法, 因為這個是不可以PHP運行進關閉的, 也就是說不可以用ini_set().

1. 對PHP.ini設置.

magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off

2. 如果對系統無法修改可以使用 .htaccess

PHP_flag magic_quotes_gpc Off

3. 效率最低的PHP轉義方法

  1. if (get_magic_quotes_gpc()) {  
  2. function stripslashes_deep($value)  
  3. {  
  4. $value = is_array($value) ?  
  5. array_map('stripslashes_deep', $value) :  
  6. stripslashes($value);  
  7. return $value;  
  8. }  
  9. $_POST = array_map('stripslashes_deep', $_POST);  
  10. $_GET = array_map('stripslashes_deep', $_GET);  
  11. $_COOKIE = array_map('stripslashes_deep', $_COOKIE);  
  12. }  
  13. ?> 

這裡還要提到一個關於 SQL語句中有LIKE時對%的處理, 因為addslashes對% _ 是不轉義的, 且這兩個字符在別的SQL語句也本來也不用轉義的, 所以我編了一個函數 like_esc($value), 當有LIKE語句時才使用.

對於輸出到網頁的先用stripslashes去還要用htmlspecialchars轉義一下.

我現在有一個比較懶的PHP轉義方法也是對所有轉入的都轉義.

  1. if (!get_magic_quotes_gpc()) {  
  2. function addslashes_deep($value)  
  3. {  
  4. $value = is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value);  
  5. return $value;  
  6. }  
  7. $_POST = array_map('addslashes_deep', $_POST);  
  8. $_GET = array_map('addslashes_deep', $_GET);  
  9. $_COOKIE = array_map('addslashes_deep', $_COOKIE);  
  10. }  


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved