REDLINE MAGAZINE | magic_quotes_gpcとstripslashes関数REDLINE MAGAZINEトップページへ

すべてのエントリを見る

magic_quotes_gpcとstripslashes関数

昨日「実体参照に変換するやつ作りたい」という記事の最後で\マークスパイラルに陥って「ウガーーー」ってなったって書いたんだけど原因が分かったのでメモ。あ。ちなみに\マークとか書いてるけど、バックスラッシュの事です。

magic_quotes_gpcの設定が原因だった

php.iniの設定を確認してみるとmagic_quotes_gpcがOnになってました。実はこれかなり昔に1回どっかで読んで知ってた事なんだよな・・・。当時はただ読んでるだけで全然頭に入ってなかったんだけど、今になって思い出した。

PHP: マジッククオートとは - Manual

オンの場合、全ての' (シングルクオート), " (ダブルクオート), \ (バックスラッシュ)およびNULL 文字がバックスラッシュで自動的にエスケープされます。 とのこと。デフォ状態ではOnになってる。

だけど下記ページの警告の部分でこの機能は PHP 5.3.0 で 非推奨となり、PHP 6.0.0 で削除されます。この機能を使用しないことを強く推奨します。って書いてあるよ。マジッククオートは、PHPスクリプトに入力されるデータを 自動的にエスケープする機能です。 コードでは、マジッククオートをオフにして 実行する際必要な時にデータをエスケープすることが望まれます。えーと、んじゃ基本はOffにしておいた方がいいってこと?

PHP: マジッククオート - Manual

なんで利用するのか、しないのかの説明はこんな感じ。

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

このページの一番上へ

その他の情報など

最近のコメント

PHP オブジェクト指向の勉強
  • Red - 2010.01.08
  • hogepage - 2010.01.21
  • Red - 2010.01.22
  • - 2011.11.27
  • houseiii - 2011.11.27
Fireworks トリミング画像を一括書出 CS4編
  • Iper - 2009.06.27
  • Red - 2009.06.27
  • mala - 2011.11.17
  • Red - 2011.11.18
jQueryでボックスを上下左右中央に簡単配置
overflow を使用したボックス背景のこと
  • - 2007.12.13
  • Red - 2007.12.13
  • - 2007.12.13
  • Red - 2007.12.13
  • hj - 2011.09.23
IE6 → 透過PNG+overflow=混ぜるな危険(追記有)

メッセージを送る

こちらのメッセージ送信フォームは閉鎖させて頂きました。
御用の方は新しい方のブログ にコメント頂くか、 連絡用のフォーム もありますので、そちらからご連絡ください。