2011-12-19 46 views
-5

如果數據是爲什麼mysql_real_escape_string正在改變我的網址

$data = '<a href="http://www.abc.com">my Anchor</a> 

此功能

$res = get_magic_quotes_gpc() ? stripslashes($data) : $data; 
    $res = mysql_real_escape_string($res); // php 4.3 and higher     

將其轉換爲

<a href="\"http://www.abc.com"">my Anchor</a> 

爲什麼

+0

開始調試您的代碼並找出許多代碼中的哪一個以您不喜歡的方式更改值。 – hakre 2011-12-19 20:33:48

+0

代碼是好的,我打了個電話問題是這兩條線我也試圖運行它。它不工作的方式應該是 – 2011-12-19 20:35:49

+0

我會假設如果某件事情沒有按照它應該的方式工作,它從定義上說並不好? – Robus 2011-12-19 20:39:17

回答

1

第一行

$res = get_magic_quotes_gpc() ? stripslashes($data) : $data; 

檢查是否設置了magic_quotes_gpc。它會檢查get_magic_quotes_gpc() function。如果該標誌被設置,它會在字符串上調用stripslashes。該函數從字符串中刪除\。例如,它將\'的每一次出現轉化爲\,並將\\的每一次出現轉化爲\。

第二行

$res = mysql_real_escape_string($res); 

進一步修改字符串。它用'替換''。通常使用mysql_real_escape_string來避免安全問題,特別是SQL Injection。將SQL查詢發送到SQL數據庫並使用字符串連接手動構建SQL語句時,您的代碼易受攻擊。

總而言之:

  1. 第一行字符串變爲< A HREF = 「http://www.abc.com」 >我錨< /一>。這是相同的字符串。
  2. 第二行將字符串更改爲<我的Anchor </a >。這是相同的字符串,其中「被替換爲\」。

這些命令只有在使用字符串連接構建SQL語句時纔有意義。

相關問題