1

我知道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在同一个变量上使用了两次。

例如

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

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

3 回答 3

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 转义。

于 2012-07-02T09:52:38.347 回答
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>";
于 2012-07-02T09:51:31.223 回答
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'] ?>
于 2012-07-02T09:50:10.930 回答