マジッククオートについて
最近はPHP7が主流になってきていますが、
PHP5.3もまだまだ多くのサーバで動いています。
PHP5.3バージョンを使っているサーバでフォームなどを組んでいると発生するのが、
マジッククオートの問題です。
マジッククオートが有効になっている場合、
シングルコーテーション(')やダブルコーテーション(")などが自動でエスケープされてしまいます。
エスケープとは、
シングルコーテーションやダブルコーテーションの様なそのままではブラウザの画面に表示できないような特殊な文字に、
バックスラッシュ(¥)を付与することで、
表示できるようにすることです。
自動でエスケープしてくれるのであれば、
開発者の手間が省けて助かるはずなのですが、
困ったことに、
意図しない場面でもバックスラッシュ(¥)が勝手に付与されて困ってしまうことがあります。
なので、マジッククオートは、出来ればオフにしておいて、
エスケープ処理は必要に応じて自分で設定するのがおすすめです。
と言っても、
既に稼働済みのサーバのphp.iniを変更は恐いですし、
そもそも共用サーバだと勝手に設定を変更することが出来ない場合も多いです。
なので、
マジッククオートは無効にしておいて、
エスケープ処理はプログラムサイドで対応しましょう。
もしくは、.htaccessを使って対応することも可能です。
ということで、
今回は、
マジッククオートがオンになっていないかの確認方法
と、
マジッククオートがオンになっている場合の対応方法
についてまとめておきます。
マジッククオートの確認方法
マジッククオートの設定が、
現在オンになっているのか?
それとも、
オフになっているのか?
は、
get_magic_quotes_gpc()関数で確かめることができます。
PHPのスクリプトに、
echo get_magic_quotes_gpc()
と記述して、
ブラウザ上からアクセスしてみて下さい。
「1」が返って来れば、オンになっています。
または、
お馴染みのphpinfo()でも確認できます。
「magic_quotes_gpc」の項目を探してみて下さい。
「on」になっていれば、マジッククオートが有効になっています。
マジッククオートの無効化
stripslashes()関数で、バックスララッシュを取り除く
マジッククオートがオンになってる場合、
以下の様なコードで無効化が可能です。
<?php
//マジッククオートがOnになっている場合
if(get_magic_quotes_gpc()){
//バックスララッシュを削除(クォートされた文字列を元に戻す)
$string = stripslashes($string);
}
?>
.htaccessを使ってマジッククオートをオフにする
マジッククオートの設定は、.htaccessを使ってオフにすることも可能です。
方法は、以下の記述を.htaccessに追記するだけです。
php_flag magic_quotes_gpc On
最後に
マジッククオートの設定は、PHP5.3.0で非推奨になり、
PHP7.0.0で削除されましたが、
まだまだ多くのサーバでPHP5.3.0が現役で活躍しています。
マジッククオートがオンになっていると、
シングルコーテーションやダブルコーテーションが勝手にエスケープ(バックスラッシュ付与)されてしまうので、
対応には注意しましょう。
プログラム側で対応するか、
.htaccessを使って機能をオフに出来るので、
こちらの記事を参考にして頂ければと思います。
この記事へのコメントはありません。