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と後ですか? そうでなければ、たくさんのコードを調べなければならない..

また、2回使用するhtmlspecialcharsと、1回とは異なることになりますか? コードのどこかでhtmlspecialchars、同じ変数に対して 2 回使用したと確信しています。

例えば

$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

検索変数の 2 つのコピーが必要です。1 つは SQL に格納され、もう 1 つは mysql_real_escape_string を介して渡すことができます。もう一方は表示され、そこで htmlspecialchars を使用します。

実際には 3 つのコピーが必要です。1 つは、たとえば " " を "+" にエンコードします。これは GET URL 用です。もう 1 つは SQL 文字をエスケープします。3 つ目は HTML をエスケープします。

_web と _sql も UTF8 で渡したい場合があります。

$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

sql の文字列をエスケープするために使用mysql_real_escape_stringします (※html の特殊文字はエスケープしないでください)。

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

htmlspecialcharsデータをWebページに表示する場合に使用します。

<?php echo htmlspecialchars($var) // ex. $var is the content of $_GET['search'] ?>
于 2012-07-02T09:50:10.930 に答える