今まで、iPodで聴いた再生履歴をデータベースに反映させるためには、iTunesのプレイリストの書き出しでUnicodeテキストに出力し、これをWindowsPCにコピーしてきて、テキストエディタ「TeraPad」でUTF-8、CR+LFに変換してからサーバに送信、スクリプトで処理させていた。
これを直接iTunesが出力したファイルでスクリプトが処理できないか考えていた。
色々調べた。ファイル形式はUTF-16LEで改行コードはCRであることはすぐに分かった。
しかし、fgetsでの一行読み込みと、splitによるタブでの分割ができない。
調べた結果、fgetsがUTF-16LEでは誤動作?して、改行コードの前後のNULLバイト(UTF-16だから2バイト単位になる)の切りがおかしくなることがわかった。
それを対応したコードがアップされていたので、それを流用したところうまく分割することができた。
一行ごとのUTF-8のテキストになってしまえばsplitの問題はない。
$contents = file_get_contents($filename);
$conv = mb_convert_encoding($contents, ‘UTF-8’, ‘UTF-16LE’);
$lines = explode(“r”, $conv);
解決したコードがこの3行。最後のexplodeでは、Macテキストに合わせてCRで分割している。
まだ、PHPのプロになりきれていないので、ここでsplitではなくexplodeを使う理由が分かっていないが、動いたのでいいことにした。
これで変換する手間もなくなれば、Macで直接ブラウザから送信できることにもなり一石に蝶である。
コメント