気づかなかった...

iTunesのプレイリストをエクスポートしたファイルを読み込んで最後に再生した日時の情報を用いて再生履歴としてDBに登録するPHPスクリプトを作っていた。
データの形によっていろいろな問題に当たりながらも徐々に解決している。
最初に当たったのは「&」の問題。画面表示用にhtmlspecialchars()を通しているのだが、このデータをそのままDBに登録してしまっていたため曲名に「&」が含まれている曲を登録しても登録済み判定ができなかった。DBへのSQLのパラメータとして使うときにはhtmlspecialchars_decode()を通して解決(面倒なのでhtmlspecialchars()したデータを変数に入れていたため、ロジックを変えろという話もありそうだが...)
次が「’」の問題。曲名にこれが含まれている曲を登録したら「’」として登録されてしまった。しかも、登録実行までに3度画面表示をしていたため、「\’」などというどうしようもないデータが登録されてしまった。
コードをいじっても、htmlspecialchars()の第2パラメータを指定しても無駄。
結局、単に、開発に使っていたローカル環境のphp.iniで
magic_quotes_gpc = On
が指定されていたためだった。SJISなど使っていなくて、すべてUTF-8での開発をしているため、こんなのはOffで問題ない。
変更してApacheを再起動、問題なく処理されるようになった。自宅サーバで動かすときには事前確認が必要だな。もっとも、一度動かして確認画面でデータを見れば一発でわかるのでとりあえず動かせばいいのだが。

コメント