0

私の問題は些細なことのようですが、これに対する「良い」解決策は見つかりませんでした。

最初に、多くの回答を聞いた質問ですが、いつ文字列を解析する必要があるのmysql_real_escape_string()でしょうか? ユーザーが指定したデータをデータベースに保存する場合にのみ必要だと思いますが、それは従うべき良いルールですか?

2 番目の質問です。これが本当の問題です。で文字列を解析すると、文字列内の有害な文字の前にmysql_real_escape_string()特殊文字が配置されます。\関数が a を見つけた場合、 a'が追加される\ため、結果は になり\'ます。

問題は、データベースから同じ文字列を読み取るときに、その\文字も取得することです。\キャラクターを消す良い方法はありますか?私が持っていた考えの1つは、を使用することですがstr_replace("\\","",$string)、これはこれを行うための適切で安全な方法ですか?

皆さん、ありがとうございました!

4

4 に答える 4

2

あなたはstripslashes()を使うことができます

例えば:

<?php
    $text = "Test\'ing my app";
    echo stripslashes($text);
?>
于 2012-08-14T19:13:55.853 に答える
2

mysql_real_escape_string()\ストリングにパーマネントを配置しません。挿入が完了するまで、それらを使い切るだけです。

文字列のバックスラッシュの原因として最も可能性が高いのは、を使用するaddslashes()Magic Quotes、環境でデフォルトでオンになっている場合です。

stripslashes()いずれの場合も、PHPを使用してそれらを削除できます。

$string = stripslashes($string);


の別のリファレンスmysql_real_escape_string()ここにあります。

于 2012-08-14T19:14:03.937 に答える
0

\追加された文字は、m_r_e_s実際には DB に挿入されません。取得時にこれらを取得している場合は、magic_quotes_gpcのようなものが有効になっていて、スラッシュが自動的に追加されているためです。

とはいえ、関数は非推奨であるため、実際にはPDOまたはMysqliに切り替える必要があります。mysql_

最初の質問は正しいです。ユーザー入力は、挿入する前に適切にエスケープする必要があります。PDO と Mysqli を使用すると、準備済みステートメントを使用でき、独自のエスケープ関数も提供されます。

2 番目の質問に関しては、次のようなコードを試してください。

if (get_magic_quotes_gpc()) {
    $value = stripslashes($_POST['value']);
}

これにより、PHP によって自動的に追加されたスラッシュが削除されます。魔法の引用に関する詳細情報。

于 2012-08-14T19:15:49.540 に答える
-1

まず、mysql_real_escape_string の使用は推奨されません。magic_quotes がオンになっているかどうかを確認します。

echo "Magic quotes is " . (get_magic_quotes_gpc() ? "ON" : "OFF");

または、使用できますstripslashes

于 2012-08-14T19:16:43.133 に答える