-1

私はhtmlページから入力を取得しています。データはphpページに送られ、$ codeなどの変数に保存されます。問題は私が提出するときです:-

    #include<iostream>
    using namespace std;
    int main( ) {
    cout<<"1";
    }

次に、 $code に格納されるものは次のとおりです:-

#include<iostream>
using namespace std;
int main( ) {
cout<<\"1\";          //Notice the change , these backslashes at cout.
}

どうすればこれを回避できますか? 私は 000webhost.com を使用していますが、これは私のローカルホストでは起こりません。

4

2 に答える 2

0

最善の解決策 php.ini ファイルで、magic_quotes_gpc ディレクティブが on に設定されている可能性があります。これは、セキュリティ上の理由から無効にする必要があります。php.ini ファイルにアクセスできない場合 (共有ホストなど) は、.htaccess ディレクティブを使用していつでも同じことができます (これが apache サーバーであると仮定します)。

あなたのphp.iniで

magic_quotes_gpc Off

.htaccess ファイル内:

php_flag magic_quotes_gpc Off

なぜこうなった?

これが発生する理由は、次の一連のロジックによるものです。

エスケープが必要な文字列がサーバーに送信されます。これは私のひもです。それは素晴らしいです。Magic Quotes は、コードに到達する前にアポストロフィをエスケープします。これは私のひもです。すばらしい mysql_real_escape_string には、バックスラッシュ \ とアポストロフィ \' の 2 つのエスケープ文字が含まれるようになりました。これは私のひもです。It\\'s awesome この新しいスーパーエスケープされた文字列はデータベースに保存されます。文字列がデータベースから取得されると、stripslashes に渡されます。これにより、手順 3 で追加された 2 つのエスケープが削除されますが、バックスラッシュの 1 つがエスケープされているため、stripslashes はそれが属していると認識します。これは私のひもです。すばらしいです。バックスラッシュの数が増えるたびに、これらの文字列をデータベースに再送信すると、この問題は本当に手に負えなくなります。

代替ソリューション 迅速かつ簡単な代替手段は、文字列を mysql_real_escape_string に渡す前に、magic_quotes によって追加されたスラッシュを単純に削除することです。

$str = stripslashes($code);
$str = mysql_real_escape_string($str);
于 2013-04-01T08:29:36.597 に答える
-1

引用符がエスケープされているため、これは発生しません。引用符がエスケープされていない場合、「リンゴ」を保存しているとします。

$var = ""apple"";

これが機能している間にエラーが発生します:

$var = "\"apple\"";

stripslashes();私が考えるデータをエコーする予定がある場合は、スラッシュを取り除くために使用できます。

于 2013-04-01T07:52:18.610 に答える