アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 0人
プロフィール
月読☆彡
オーナーへメッセージ
QRコード
QRCODE

2007年09月21日

予期しないエスケープ文字

フォーム書き込み時に勝手に「¥」(バックスラッシュ)が付いてしまった。。。
例えば、「パソコン」→「パソ¥コン」、「表示」→「表¥示」のような感じで。
これは、PHPの設定ファイル(PHP.ini)の「magic_quotes_gpc」という項目がONに設定されているためだそうです。
「magic_quotes_gpc」がON設定となっている場合、フォームから受け取った文字の中に「¥(バックスラッシュ)」「"(ダブルクォーテーション)」「'(シングルクォーテーション)」があった際、その後ろに自動で「¥」をつけるのです。こちらは「エスケープ処理」と言い、悪意あるユーザに不正な処理(SQL injection なんて有名ですね)をさせないためにも有効な設定となっています。
んで、S-JIS の文字コードには「0x5c」を含むものがあり、「0x5c」が「¥」と同じ文字コードであることがそもそもの問題なのです。たとえば、「パソコン」の「ソ」のコードは「0x83 0x5c」なので、「パソコン」→「パソ¥コン」となるわけですね。

原因が分かれば対処方法もおのずと見えてきます。まず、真っ先に思いつく方法として「PHP.ini」内の「magic_quotes_gpc」を「OFF」にすることが挙げられます。簡単ですが、問題もあって・・・。まず、レンタルサーバなど共用にてWebサーバを使用している場合にはこの設定は勝手に書き換えることができません。自分だけの都合で他人様に迷惑かけちゃだめですよね。まぁ、可能性としてサーバの管理者が「Apache」の「AllowOverride」の設定を「ALL」にしてくれているならば、「.htaccess」でユーザごとにこの制御が可能です。「.htaccess」ファイルの中に以下の1行を加えて下さい。

php_flag magic_quotes_gpc off

これで一応は解決できるのですが、既述の通りこれではセキュリティに不安が残ります。そこで、次のように不要なときにはバックスラッシュを取り除く処理を加えてやる方法をお奨めします。

if (get_magic_quotes_gpc()) {
$str = stripslashes($str);
}


「stripslashe」はバックスラッシュが取り除かれた文字列を返します(2つ並んだバックスラッシュは1つのバックスラッシュになります)。逆に必要項目にバックスラッシュを加えたい場合は「addslashes」を使用します。こちらはデータベースへの問い合わせなどに際してクォートされるべき 文字の前にバックスラッシュを挿入した文字列を返します、とのことです(PHPマニュアル参照)。

【引用元URL】
PHP実験室

同じカテゴリー(PHP)の記事
 URLに自動的にリンクを貼りたい! (2007-07-07 17:08)
 html拡張子でPHPを実行 (2007-07-05 15:02)
 getimagesize();「画像サイズを取得」 (2007-07-02 14:05)
 phpMyAdminログイン時にパスワード (2007-06-20 16:37)
 文字列データの置換 (2007-03-03 19:03)
 phpMyAdmin-2.9.2 設置手順 (2007-02-15 15:04)
Posted by 月読☆彡 at 19:20│Comments(0)PHP
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。