1

何らかの理由で、すべての引用符がエスケープされて \" として表示されます。以前は問題ありませんでした。次に phpinfo() を調べたところ、magic_quotes_gpc がオンになっていることがわかりました。しかし、ディレクトリ /usr/local/ が見つかりません。 lib/ php.ini ファイルがあり、.htaccess ファイルを編集できません (500 内部サーバー エラーが発生します)。

代わりに、これをスクリプト ファイル (すべてのページに含まれています) の上に置いてみました。

if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}

それでも、私のページの " と ' にはまだバックスラッシュが含まれています。

私は何を間違っていますか?

4

2 に答える 2

2

このコードを試してみてください。過去にうまくいきました。

<?php
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
        $quotes_sybase = strtolower(ini_get('magic_quotes_sybase'));
        $unescape_function = (empty($quotes_sybase) || $quotes_sybase === 'off') ? 'stripslashes($value)' : 'str_replace("\'\'","\'",$value)';
    $stripslashes_deep = create_function('&$value, $fn', '
        if (is_string($value)) {
            $value = ' . $unescape_function . ';
        } else if (is_array($value)) {
            foreach ($value as &$v) $fn($v, $fn);
        }
    ');

    // Unescape data
    $stripslashes_deep($_POST, $stripslashes_deep);
    $stripslashes_deep($_GET, $stripslashes_deep);
    $stripslashes_deep($_COOKIE, $stripslashes_deep);
    $stripslashes_deep($_REQUEST, $stripslashes_deep);
}
于 2011-09-26T15:33:30.960 に答える
2

どのPHPバージョンを使用していますか?

より大きいバージョンを使用する場合は、または5.2を使用できます。-ディレクティブの設定を無視して生データを使用しているようです(デフォルトのフィルタは です)filter_input()filter_input_array()magic_quotes_gpcFILTER_UNSAFE_RAW

于 2012-03-02T20:26:26.527 に答える