ホームページ >バックエンド開発 >PHPチュートリアル >AJAX POST 変数が本番サーバーではエスケープされるのに、ローカル サーバーではエスケープされないのはなぜですか?
問題:
PHP では、$_POST 変数はAJAX POST リクエストは運用サーバーではエスケープされますが、ローカル サーバーではそのまま残ります。ローカル サーバーは Windows 上で PHP 5.3.1 を実行しますが、運用サーバーは Linux 上で PHP 5.2.12 を実行します。
理由:
2 つのサーバー間の不一致は次のとおりです。おそらく、運用サーバーでマジック クオートが使用されていることが原因です。
マジック クオート:
マジック クオートは、$_GET で特定の文字を自動的にエスケープする PHP の非推奨の機能です。 、$_POST、$_COOKIE 変数を使用して、SQL インジェクションやその他の攻撃から保護します。エスケープ文字には次のものが含まれます。
解決策:
問題を解決し、両方のサーバー間で一貫した動作を確保するには、運用サーバーでマジック クオートを無効にすることができます。 php.ini でグローバルに、または set_magic_quotes_runtime() を使用してスクリプトごとに実行します。
マジック クオートを無効にすることができない場合は、取得した POST データのtripslashes() 関数を使用してスラッシュを手動で削除できます。
<code class="php">if (get_magic_quotes_gpc()) { $my_post_var = stripslashes($_POST["my_post_var"]); }</code>
マジック クォートを無効にするか適切に処理することで、運用サーバー上で $_POST 変数がエスケープされなくなり、AJAX POST リクエストが正しく機能できるようになります。
以上がAJAX POST 変数が本番サーバーではエスケープされるのに、ローカル サーバーではエスケープされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。