POST を使って投稿したデータが・・・ mysql から取り出すと ・・・バックスラッシュが増えてる!!! なんてことになったので、調べてみた。

Twitter でつぶやけど、誰も教えてくれないので、ひたすら検索しまくりました。そしたら、magic_quotes_gpc という設定値が ON になっているらしいとのこと。

magic_quotes_gpc の機能は・・・ バックスラッシュがあったらもひとつバックスラッシュをつけてエスケープっぽいことをする、ということです。Get, Post, Cなんとか のときに、送受信データにバックスラッシュをつけて処理するんだそうです。するとですね、予期しないところにバックスラッシュが勝手に入るわけですよ。もう悲惨です。

解決策

まずは magic_quotes_gpc が ON になっていることを確認します。php ファイルの中で echo phpinfo() なんてやってやると出てきます。ほかにも方法はあります。

次に設定を変更します。ファイル内でオン・オフを判別してif文で処理を分岐させるという手もありますが、現在では非推奨機能となっており、php6で消滅する予定なので、if文なんて書くだけ無駄です。設定ファイルですが、debian lenny, apache2, php5 を使っている私の環境では、/etc/php5/apache2/php.ini でした。

それでは、 cat -n /etc/php5/apache2/php.ini | grep magic と書いてみましょう。 457行目に"magic_quotes_gpc=ON"とあるのがわかります。 vim file_name でファイルを開き、:457 と入力して Enter を押します(これで457行目に飛びます)。編集して保存。

最後に `apache2ctl restart` を実行して検証です。