5

PHPを使用してMySQLデータベースにフォームを送信しています。

関数を介してフォームデータを送信していmysql_real_escape_string($content)ます。

エントリがデータベースに表示されると(phpMyAdminをチェックイン)、すべての二重引用符と一重引用符がエスケープされます。

これはPHP構成の問題だと私はかなり確信していますか?

それで:

$content = 'Hi, my name is Jascha and my "favorite" thing to do is sleep';
mysql_real_escape_string($content);
$query = 'INSERT INTO DB...'

私のデータベースに次のように表示されます:

こんにちは、私の名前はジャシャです。私の「好きな」ことは睡眠です。

誰に何をすればいいですか?(php.iniにアクセスできません)。

4

3 に答える 3

6

フォームから$contentデータを取得している場合(PHPコードの「現状のまま」ではない場合)、Magicの引用符が原因で問題が発生している可能性があります(を参照magic_quotes_gpc) 。

基本的に :

magic_quotesがオンの場合、すべての' (一重引用符)、"(二重引用符)、\ (バックスラッシュ)、およびNULはバックスラッシュで自動的にエスケープされます

魔法の引用符が有効になっている場合(たとえば、の出力でこれを確認できphpinfo()ます)、そのような「二重エスケープ」が発生します。

  • それらの文字は、魔法の引用符によって一度エスケープされます、
  • そして、彼らは二度目に逃げるでしょうmysql_real_escape_string


この場合の良い解決策は、の使用を停止するのではなくmysql_real_escape_string、構成でmagic_quotes_gpcを無効にすることです...

...しかし、アクセスできないため、実際には、使用を開始する前に、取得stripslashesした入力を呼び出して、魔法の引用符の効果を「元に戻す」必要があります。$_GET$_POST

注:(引用)のマニュアルページに記載されているアドバイスです:mysql_real_escape_string

注:magic_quotes_gpcが有効になっている場合は、最初 stripslashes()にデータに適用します。すでにエスケープされているデータに対してこの関数を使用すると、データが2回エスケープされます。

于 2010-02-17T20:30:55.047 に答える
5

リクエストデータを取得するときは、魔法の引用符を考慮する必要があります。の場合、入力で実行する必要がありget_magic_quotes_gpc()ます。最善の方法は、そのための関数を作成することです。何かのようなもの:truestripslashes()

function get_string($array, $index, $default = null) {
    if (isset($array[$index]) && strlen($value = trim($array[$index])) > 0) {
        return get_magic_quotes_gpc() ? stripslashes($value) : $value;
    } else {
        return $default;
    }
}

..として使用できます

$input = get_string($_POST, 'input');

..それ以外の

$input = $_POST['input'];

、、などの些細なことについても同じようget_number()にします。get_boolean()get_array()

于 2010-02-17T20:35:30.813 に答える
-1

少し遅いことは知っていますが、phpの初心者として、本当にシンプルなものが必要でした。したがって、以下のコードを使用して、マジック_quotes_gpcを使用してOPによって記述された問題を修正しています。サーバーはphp 5.2.8を実行しており、サーバーは5.3を実行しています。

私のウェブアプリはdatatables.netを使用して情報を表示しています。データベースに特殊文字をエスケープしてデータを保存すると、JSONエラーが発生し始めました。

私の開発マシンは5.3を使用していますが、これは必要ありませんでしたが、php 5.2.8では、値をデータベースに保存するためにストリップスラッシュ関数を使用する必要がありました。

$description = mysql_real_escape_string($description);
// hack for php 5.2.8 //
if (get_magic_quotes_gpc()) {
     $description = stripslashes($description); 
     //echo "description: $description";
    }

これは基本的に上記と同じ答えだと思いますが、私にとってはもっと私のスタイルのようでした。うまくいけば、これは私と同じボートで他の人を助けるでしょう.....

于 2010-07-16T05:43:42.787 に答える