1

最近、サーバーをUbuntuからUNIXに変更しました。MySQLとPHPのUbuntuインストールでは、すべての文字列をデータベースに挿入する前にエスケープする必要があり、余分なエスケープ文字なしでデータベースから読み取られました。ただし、新しいシステムでは、ユーザーがフォームに入力した文字列は、そのままの場合、エスケープされていない場合はデータベースに正常に挿入されます。エスケープすると、余分な文字が追加されます。しかし、次に、単純な。=を使用してユーザーが入力した文字列にタグを追加する必要があり、文字列はエスケープされない限りデータベースへの入力を拒否されました。また、文字列の元のユーザー入力部分には、余分なエスケープ文字が含まれていました。これに対する簡単な解決策はありますか?(PHP 5.2.17、MySQL 5.1、Apache 2.2.19)

4

1 に答える 1

1

魔法の引用とそれがスクリプトに影響を与える理由についての説明はここにあります。基本的に、この機能はブラウザからのユーザー入力に影響しますが、自分で作成した他の文字列には影響しません。

古いサーバーでは関連する設定magic_quotes_gpcがオフになっているようですが、新しいサーバーではアクティブになっています。実行時の設定に応じて、常に魔法の引用符を削除して、制御できない場合でも、すべてのマシンで同じセットアップを使用しますphp.ini

入力パラメータを処理する前に、これを中央のインクルードファイルに入れてみてください。

// Strip slashes from a string or array recursively
function stripshashesr($text)
{
    if (is_array($text))
    {
        foreach($text as $key => $value) $text[$key]=stripshashesr($value);
        return $text;
    }
    return stripslashes($text);
}

// Strip slashes from GPC
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
    foreach($_GET as $key => $value) $_GET[$key]=stripshashesr($value);
    foreach($_POST as $key => $value) $_POST[$key]=stripshashesr($value);
    foreach($_REQUEST as $key => $value) $_REQUEST[$key]=stripshashesr($value);
    foreach($_COOKIE as $key => $value) $_COOKIE[$key]=stripshashesr($value);
}

これにより、設定に応じて魔法の引用符が自動的に削除されます。

于 2012-07-22T06:49:29.103 に答える