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




※コメント欄に「<」「>」等を含むソースを記載する場合は実体参照に変換してください。

このページの一番上へ

その他の情報など

最近のコメント

サイトデザインの考え方(1)
Fireworks コレ、5分で作ります。その2
ボックス全体をリンクにしたい
  • Red - 2009.12.28
  • - 2009.12.28
  • なおと - 2009.12.29
  • kaz - 2010.07.22
  • Red - 2010.07.23
bodyにfont-size:62.5%を指定すると・・・
  • tack - 2010.06.26
  • Red - 2010.06.28
MODx スニペットを使ってみる
  • webd - 2010.06.07

メッセージを送る

name
e-mail
url
message