PHPでデフォルトのマジッククォートまたはユーザー定義のaddslash/stripslashを使用する方が良いのはどれですか?一番いいものを使いたいです。私を助けてください。
4 に答える
手動でやってください!マジッククォートはPHP5で非推奨になり、PHP 6で完全に削除されます。それだけでなく、純粋な悪です。想像もできない場所でエラーが発生します。明示的は常に暗黙的よりも優れています(Pythonが言うように)。
マジック クォートをオフにする場合は、すべての入力でクォートを自動的にエスケープする独自のシステムに置き換えないでください。ポイントは、すべてを自動的にエスケープするのは悪い考えだということです。アプリケーションの別のシステムまたはレイヤーに渡す前にのみ、何かをエスケープする必要があります。各システムには、エスケープのためのさまざまな要件があります。
たとえば、HTML を出力する場合は、文字列変数を出力する前に htmlspecialchars() を使用します。SQL をデータベースに送信する場合は、mysql_real_escape_string() など、そのデータベース用に設計されたエスケープ関数のいずれかを使用します。XML ドキュメントを作成している場合は、PHP の XML ライブラリのいずれかを使用します。これらはあなたのためにエスケープを行います。
万能のエスケープ ソリューションはありません。それが魔法の引用符が悪い理由です。
neither.
magic quotes is the root of all evil! (in my eyes even worse than premature optimization xD)
and why do you want to create a user defined (add
|strip
)slashes function, when there are native php ones?
if you want to escape your date for a database use the database specific functions (e.g. mysqli_real_escape_string
)
EDIT. to complete my answer (after debating with sadi in the comments):
if you want to display/output some input, use
htmlspecialchars
if you’re going to use your input in an URL, use
urlencode
so, there is no best or correct single way to encode your data. you have to use the right functions in the right place at the right time. each has its own purpose (see here: http://xkcd.com/163/)
Magic Quote をまったく使用しないことをお勧めします。スクリプトの最初で次のようにオフにすると:
set_magic_quotes_runtime(0);
以前のバージョンの PHP と下位互換性があるアプリケーションを作成しながら、現在のバージョンの PHP のコーディングではそれらが減価償却され、将来のバージョンではそれらが完全に削除されます。
自分で文字列から引用符を削除することをお勧めします。問題が発生した場合、PHP の設定や現在使用している PHP バージョンとの互換性の問題ではなく、自分のコードに問題があることがわかります。
それが役立つことを願っています。