研究室の同期がこのブログを使ってくれているのだが,それで発覚したバグを直そうといろいろやってたら他の不具合も顕在化してきて結構な作業になった。以下メモ。
今まで勘違いしていたのだが,データベースにデータを挿入するクエリーで addslashes を使ってクエリー内の文字列からシングルクオートなどの文字をエスケープすると,結果として挿入される文字列にはエスケープ文字(バックスラッシュ)は付かないのでした。付くと思ってたので取り出すときに stripslashes を使っていたけどそれは要らなかった。
なぜ勘違いしていたかというと,PHPの magic_quotes_gpc というオプションがオンだったため,データベースに挿入するときはあらかじめ自動的にエスケープされていて,さらに addslashes でもう一回余分にエスケープされていた。したがって一回エスケープされた状態でデータベースに入っていたということ。それで取り出すときにエスケープを外していたからつじつまが合っていた。しかしこの状態だと文字列を検索するときに余分なエスケープ文字が入っているので面倒なことになってしまう。
magic_quote_gpc をoffにするには, .htaccess に
php_flag magic_quote_gpc off
と書けばよい。
OS X (10.3) でこれをやろうとしたらデフォルトのApacheの設定で .htaccess が使えなくなっていた。そこで /private/etc/httpd/httpd.conf を編集して AllowOverride All にした。それでもなぜかだめ。よく見たらユーザディレクトリはユーザごとの設定が /private/etc/httpd/users/ユーザ名.conf というファイルになっているのでした。
