-1

重複の可能性:
非表示の入力の値にエスケープ文字が追加されるのはなぜですか

データベース内のテーブルからユーザーの投稿をクエリしています。それらを出力すると、アポストロフィが含まれている場合、アポストロフィの前にバックスラッシュが挿入されます。

なぜこれを行うのですか?この問題を解決するにはどうすればよいですか?

例:

I'm hiking in Colorado's Mountains.

I\'m hiking in Colorado\'s Mountains.
4

5 に答える 5

1

2つの考えられる理由:

理由1:

サーバーでマジッククォートが有効になっています。魔法の引用符をテストするには、次のコードを使用します。

if(get_magic_quotes_gpc()){
    echo 'Magic quotes are enabled...';
}

魔法の引用符が有効になっている場合は、それらを無効にする必要があります(そしてそれについてあなたのウェブホストに文句を言う)。PHPマニュアルには、魔法の引用符を無効にするための専用のページがあります

理由2:

あなた(またはあなたの入力関数の1つ)は、SQLインジェクションに対する保護としてaddslashes()を使用しています。これは安全ではありません。プリペアドステートメント(PDOまたはmysqliを使用)は、SQLインジェクションに対する唯一の許容可能な保護手段です。

于 2012-09-23T19:06:08.460 に答える
0

次のPHP構成設定を確認する必要があります。

この機能は、PHP 5.3.0で非推奨になり、PHP5.4.0で削除されました。

私の提案:PHPバージョンを5.4.xにアップグレードすると、この問題は解消され、他の多くの新機能から利益を得ることができます。

于 2012-09-23T19:06:20.937 に答える
0

(mysql_real_escape_string による) 文字のエスケープまたはそれらの行に沿った何かである可能性が最も高いです。function を使用stripslashes()してスラッシュを削除できますが、データに対してhtmlentities()orhtmlspecialchars()を使用してセキュリティを追加することをお勧めします。

于 2012-09-23T18:56:24.140 に答える
0

http://php.net/manual/en/function.mysql-escape-string.phpを使用できます。http://php.net/manual/en/book.pdo.phpの使用を検討してください。SQL ステートメントを準備するメソッド prepare があり、多くの場合、OOP の方が優れています。(mysql_* 関数を使用していると思います)

于 2012-09-23T18:56:34.197 に答える
0

私はあなたがaddslashesstripslashesを見るべきだと思います

$text = "I\'m hiking in Colorado\'s Mountains." ;
echo stripslashes($text);

出力

I'm hiking in Colorado's Mountains.
于 2012-09-23T18:57:34.103 に答える