1

私はプロジェクトの教義で Zend フレームワークを使用しています。問題は、データベースに O'Shea のような文字列を挿入すると、O\'Shea が挿入されることです。これは二重エスケープが原因だと思います。1 つは投稿を取得するとき、もう 1 つは doctrine を使用するとき、なぜ print_r($_POST) のときにすでにエスケープされた値を取得するのですか?

教義クエリの構文は次のとおりです。

$req = $this->getRequest()->getPost();
$company = Doctrine::getTable('Project_Model_Companies')->find($company_id);
$company->name = $req['name'];
$company->save();

この二重エスケープを回避する方法を教えてください。または何が問題なのですか? ありがとう。

4

2 に答える 2

6

magic_quote_gpcがオンになっているようです。

get_magic_quotes_gpc を使用して、マジック クォートが有効になっているかどうかを確認できます

echo (get_magic_quotes_gpc()) ? 'Magic qoutes Enabled' : "Magic qoutes Disabled";

マジック クォートを無効にすることを強くお勧めします。

次の .htaccess ファイル ディレクティブを試してください。

php_value magic_quotes_gpc Off 

またはあなたのphp.iniで

magic_quotes_gpc = Off
于 2011-05-19T07:39:16.840 に答える
2

Benjamin Cremerの回答に加えて:

マジック クォートを無効にできない場合があります。インデックス ファイルで次のコードを使用して、この問題が二度と起こらないようにしてください。

if (get_magic_quotes_gpc()) {
  function stripslashes_deep($value)
  {
    $value = is_array($value) ?
          array_map('stripslashes_deep', $value) :
          stripslashes($value);

    return $value;
  }

  $_POST = array_map('stripslashes_deep', $_POST);
  $_GET = array_map('stripslashes_deep', $_GET);
  $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
  $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}
于 2011-05-19T13:18:12.360 に答える