magic_quotes_gpcとstripslashes関数
昨日「実体参照に変換するやつ作りたい」という記事の最後で\マークスパイラルに陥って「ウガーーー」ってなった
って書いたんだけど原因が分かったのでメモ。あ。ちなみに\マークとか書いてるけど、バックスラッシュの事です。
magic_quotes_gpcの設定が原因だった
php.iniの設定を確認してみるとmagic_quotes_gpcがOnになってました。実はこれかなり昔に1回どっかで読んで知ってた事なんだよな・・・。当時はただ読んでるだけで全然頭に入ってなかったんだけど、今になって思い出した。
オンの場合、全ての' (シングルクオート), " (ダブルクオート), \ (バックスラッシュ)およびNULL 文字がバックスラッシュで自動的にエスケープされます。
とのこと。デフォ状態ではOnになってる。
だけど下記ページの警告の部分でこの機能は PHP 5.3.0 で 非推奨となり、PHP 6.0.0 で削除されます。この機能を使用しないことを強く推奨します。
って書いてあるよ。マジッククオートは、PHPスクリプトに入力されるデータを 自動的にエスケープする機能です。 コードでは、マジッククオートをオフにして 実行する際必要な時にデータをエスケープすることが望まれます。
えーと、んじゃ基本はOffにしておいた方がいいってこと?
なんで利用するのか、しないのかの説明はこんな感じ。
PHP: なぜマジッククオートを使用するのか - Manual
PHP: なぜマジッククオートを使用しないのか - Manual
magic_quotes_gpcがOnでも\を入れない方法
stripslashes クォートされた文字列のクォート部分を取り除く
このstripslashes関数を使ってバックスラッシュを削除した文字列を返してもらえばいいんだね。昨日のソースで試してみるなら、受け取った文字列に対してまず
$str = stripslashes($str);
こういう風にバックスラッシュを削除した状態にしてやればいい、と。そうしておくと昨日\と格闘した部分、
$str = str_replace("\\&","&",$str);
$str = str_replace("\\\\","\\",$str);
この2行はいらなくなるってことですね。把握した。
magic_quotes_gpcの値を調べる
php.iniを直接調べてもいいし、phpinfo()でも値は調べられるんだけど、この関数を使っても調べられる模様。
get_magic_quotes_gpc magic quotes gpc の現在の設定を得る
<?php
print_r(get_magic_quotes_gpc());
?>
これで出てきた値が1ならOn、0ならOffってこと。
<< 実体参照に変換するやつ作りたい | dat から1行ずつ抜き出して xml 書き出し >>
トラックバック
このエントリーのトラックバックURL:
http://redline.hippy.jp/cgi/mt/mt-tb.cgi/233