我知道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
答案 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'] ?>