2012-06-20 19 views
7

私はこれが本当に一般的で些細な音だと知っていますが、ここに挑戦しています。私はZend/DoctrineのWebサイトを持っており、バックエンド管理のためにckeditorを使用しています。サイトをアップロードした後、私は編集テスト中にサイトのルック&フィールが台無しになっていることに気付きました。データベースが引用符にスラッシュを追加するのを防ぐ方法

firebugの助けを借りて、私はhtmlの全面にスラッシュがあることを見てきました。インライン編集後、ルック・アンド・フィールが正常に戻りました。非常に多くのファイルがあるので、mysqlからデータを出力する前に他のデコードを行うことはできません。

この問題を解決するにはどのようなオプションが必要ですか。サイトは既にアップされており、私はこれについて少し不快であると感じています。誰もヒントを与えることができますか?ありがとう

+4

戦う秘密忍者マジッククオートは、PHP <5.4スタイルです。 – hakre

答えて

4

私は助けてくれてありがとう。本当に受け入れられる解決策は、@Stanislav Palatnikのものでなければなりません。ちょうど私の.htaccessで動作しませんでした。ホスティングサーバーは、私のpublic_htmlにphp.iniを入れて、私にそれを変更させるのに十分なものでした。だから+1を@Stanislav Palatnikは彼は問題を指摘したので。私は誰かが自分の状況で自分自身を見つけた場合に私が共有すると思った興味深い情報も見つけました。同じページに

info from: http://support.godaddy.com/groups/web-hosting/forum/topic/how-to-turn-off-magic_quotes_gpc/ 
Yes – the solution below worked for me: 

(1) First of all do not try to turn off the magic quotes in your .htaccess file, it won’t work on godaddy. 
(2) Second, if you’re running PHP5 on your account, rename your php.ini file to php5.ini, make sure it’s in your root folder. 
(3) Third, make sure all the lines in your php5.ini file end in a semi colon ; 
(4) Fourth, add this line to your php5.ini file: 
magic_quotes_gpc = Off; 

誰かがそれだけで唯一、magic_quotes_gpcの設定すべきではないと述べたが、以下に示すように、他のものがaswell:

magic_quotes_gpc = Off; 
magic_quotes_runtime = Off; 
magic_quotes_sybase = Off; 

これが誰かを助けた希望を。@Stanislav Palatnikに感謝

+1

本当に、これは共有ホストサーバー(GoDaddyなど)の正しい答えです。魅力的な作品! – Sablefoste

9

magic_quotes_gpcです。それがオフになっていることを確認できますか?ここで

はそれをオフにする方法である: http://php.net/manual/en/security.magicquotes.disabling.php

は、GPC(Get/Post/Cookie)処理のためにmagic_quotesの状態を設定します。 magic_quotesがonの場合は、すべての '(シングルクオート)、 "(二重引用符)、\(バックスラッシュ)とNULのは、自動的にバックスラッシュでエスケープされている。

また、あなたはプリペアドステートメントを使用していますか?PHP PDO/mysqliのを

+0

こんにちは。すぐにこれに対応することは非常に親切です。残念ながら、それをin.htaccessの内部サーバーや新しいzend gurusに追加しますか?application.iniを追加することは可能ですか? –

+0

何が問題なのですか? –

5

データがデータベースに挿入される前に二重にエスケープされているようですが、mysql_real_escape_stringまたはaddslashesを使用していますか?もしそうなら、データを挿入する前にstripslashを使いたいかもしれません:

mysql_real_escape_string(stripslashes($data)); 

さもないと、あなたがデータベースからデータを取得した後、あなたは理論的にstripslashesを呼び出すことができます。

stripslashes($data); 

第二のアプローチは、しかし、あまり望ましくありません。データを適切にデータベースに保存する方が良いでしょう。これは魔法である場合には

2

は、問題を引用し、私はあなただけのapplication.iniへのアクセス権を持つ思い出すように、次の追加と、それはこれがまだあなたのユーザー/ユーザーグループを必要と

phpSettings.magic_quotes_gpc = 0 
phpSettings.magic_quotes_runtime = 0 

を試してみるかもしれません)

0
<?php 
    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);} 
?> 

は/更新クエリを挿入しているPHPのページにこれを追加します:)

関連する問題