mysql_real_escape_string,htmlspecialchars错了吗?

时间:2012-07-02 09:45:23

标签: php

我知道htmlspecialchars用于html输出,mysql_real_escape_string用于插入数据库。我不确定如何在这种情况下应用。例如

$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两次做一次不同的事情吗?我确信在我的代码中某处我在同一个变量上使用了htmlspecialchars两次。

e.g。

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

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

3 个答案:

答案 0 :(得分: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转义。

答案 1 :(得分:1)

您需要两个搜索变量副本:一个存储在SQL中,另一个可以传递给mysql_real_escape_string;另一个要显示,你使用htmlspecialchars。

实际上你需要三个副本:在一个,你编码,例如“”到“+”,这是用于GET URL;另一个会逃脱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>";

答案 2 :(得分: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'] ?>