2012-07-02 51 views
1

我知道htmlspecialchars用於html輸出,mysql_real_escape_string用於插入數據庫。我不確定如何在這種情況下應用。例如mysql_real_escape_string,htmlspecialchars錯誤?

$search = mysql_real_escape_string(htmlspecialchars($_GET['search'],ENT_QUOTES)); 

mysql_query("INSERT INTO table1 VALUES ('','$search')",$this->connect); 

echo "<a href='http://www.example.com/$search'>$search</a>"; 

我是不是要單獨頂行這樣mysql_real_escape_string是插入前和htmlspecialchars是後?我希望我不必,否則我必須去了很多代碼..

也會使用兩次做任何事情不同,然後一次?我敢肯定,在我的代碼中,我在同一個變量上使用了兩次htmlspecialchars

例如

$var = htmlspecialchars($one); //top of page 

$var2 = htmlspecialchars($var); //another function 

回答

2
$searchTerm = $_GET['search']; 

mysql_query("INSERT INTO table1 VALUES ('', '" . mysql_real_escape_string($searchTerm) . ')"', $this->connect); 

echo "<a href='http://www.example.com/" . htmlspecialchars(urlencode($searchTerm), ENT_QUOTES) . "'>$search</a>"; 

唯一的解脫,在需要的確切時刻,一次。就你而言,由於該值應該是URL的一部分,因此它需要進行URL編碼。由於該URL隨後成爲HTML的一部分,因此需要HTML轉義。

0

使用mysql_real_escape_string爲sql轉義字符串(※不要轉義html特殊字符)。

$search = mysql_real_escape_string($_GET['search']); 

當您在網頁中顯示數據時使用htmlspecialchars

<?php echo htmlspecialchars($var) // ex. $var is the content of $_GET['search'] ?> 
1

你需要搜索變量的兩個副本:一個存儲在SQL,和一個你可以通過mysql_real_escape_string;另一個要顯示,在那裏你使用htmlspecialchars。

其實你需要三個副本:在一個,你編碼例如「」改爲「+」,這是用於GET網址;另一個會轉義SQL字符;第三個將轉義HTML。

您可能還想通過UTF8傳遞_web和_sql。

$search_web = htmlspecialchars($_GET['search'],ENT_QUOTES); 
$search_sql = mysql_real_escape_string($_GET['search']); 
$search_url = urlencode($_GET['search']); 

// Do try and upgrade to PDO, here... 
mysql_query("INSERT INTO table1 VALUES ('','$search_sql')",$this->connect); 

echo "<a href='http://www.example.com/$search_url'>$search_web</a>"; 
相關問題