重複の可能性:
非表示の入力の値にエスケープ文字が追加されるのはなぜですか
データベース内のテーブルからユーザーの投稿をクエリしています。それらを出力すると、アポストロフィが含まれている場合、アポストロフィの前にバックスラッシュが挿入されます。
なぜこれを行うのですか?この問題を解決するにはどうすればよいですか?
例:
I'm hiking in Colorado's Mountains.
I\'m hiking in Colorado\'s Mountains.
重複の可能性:
非表示の入力の値にエスケープ文字が追加されるのはなぜですか
データベース内のテーブルからユーザーの投稿をクエリしています。それらを出力すると、アポストロフィが含まれている場合、アポストロフィの前にバックスラッシュが挿入されます。
なぜこれを行うのですか?この問題を解決するにはどうすればよいですか?
例:
I'm hiking in Colorado's Mountains.
I\'m hiking in Colorado\'s Mountains.
2つの考えられる理由:
理由1:
サーバーでマジッククォートが有効になっています。魔法の引用符をテストするには、次のコードを使用します。
if(get_magic_quotes_gpc()){
echo 'Magic quotes are enabled...';
}
魔法の引用符が有効になっている場合は、それらを無効にする必要があります(そしてそれについてあなたのウェブホストに文句を言う)。PHPマニュアルには、魔法の引用符を無効にするための専用のページがあります。
理由2:
あなた(またはあなたの入力関数の1つ)は、SQLインジェクションに対する保護としてaddslashes()を使用しています。これは安全ではありません。プリペアドステートメント(PDOまたはmysqliを使用)は、SQLインジェクションに対する唯一の許容可能な保護手段です。
次のPHP構成設定を確認する必要があります。
この機能は、PHP 5.3.0で非推奨になり、PHP5.4.0で削除されました。
私の提案:PHPバージョンを5.4.xにアップグレードすると、この問題は解消され、他の多くの新機能から利益を得ることができます。
(mysql_real_escape_string による) 文字のエスケープまたはそれらの行に沿った何かである可能性が最も高いです。function を使用stripslashes()
してスラッシュを削除できますが、データに対してhtmlentities()
orhtmlspecialchars()
を使用してセキュリティを追加することをお勧めします。
http://php.net/manual/en/function.mysql-escape-string.phpを使用できます。http://php.net/manual/en/book.pdo.phpの使用を検討してください。SQL ステートメントを準備するメソッド prepare があり、多くの場合、OOP の方が優れています。(mysql_* 関数を使用していると思います)
私はあなたがaddslashesとstripslashesを見るべきだと思います
例
$text = "I\'m hiking in Colorado\'s Mountains." ;
echo stripslashes($text);
出力
I'm hiking in Colorado's Mountains.