CakePHP + SimplePie コンポーネントで一部の Feed が文字化けしていた。
※参考
SimplePie CakePHPのコンポーネント | The Bakery, Everything CakePHP
調べてみたら、ファイルの文字コードや改行コードが原因で文字化けする事象があるらしいので、全ファイルをチェックしてみると、いくつか CRLF が混ざってたり、SJIS だったりするところが見つかったので対処した。
※WinSCP + サクラエディタで直接編集する場合があるが、設定が適当だった(対処済み)ので混ざったみたい。今までほかの問題がでなかったのが不思議。
取得した文字が化けた。だいたいファイルそのものが原因だろうと思って調べると、 simplepie.php が SJIS + CRLF だったので、 UTF-8 + LF にして解決。
しかし、文字化け問題は解決しない。
原因
一部の Feed のみ文字化けが発生しているので、対象の Feed を見てみると EUC-JP という共通点があった。
検索をかけると SimplePie で EUC-JP が文字化けするのは私だけではない様子。
※参考
S.Satoshiのブログ – SimplePieでEUC-JPのフィードを読み込むと化ける
SimplePie – FreeStyleWiki
SimplePie の中で EUC-JP に関する処理を見てみると、EUC-JP の文字コードは、Extended_UNIX_Code_Fixed_Width_for_Japanese ですよ。的な処理がされていた。
固定長の日本語 EUC の IANA の名前がこれ。可変長の日本語 EUC (普通に言うところの日本語 EUC) も IANA 名は Extended_UNIX_Code_Packed_Format_for_Japanese ですが、 EUC-JP というまともな別名があとからつけられました。 固定長の方はたぶん誰も使ってない (少なくても情報交換用には。) ので放置されたままなんでしょう。
なるほど、よくわからん。
おそらく、サーバが Extended_UNIX_Code_Fixed_Width_for_Japanese を理解できないんだろうと予測。
対処方法
サーバの設定を正しく行うのが本来正しい対処法なのかもしれないが、よくわからないし、ほかに影響がでるのもいやなのでアプリ側で対処しようかとも思ったが、面倒だったので、直接 SimplePie 本体を修正した。
SimplePie.inc を下記のように修正したら該当の Feed は文字化けしなくなった。(Ver1.2)
case 'cseucpkdfmtjapanese': case 'eucjp': case 'extendedunixcodepackedformatforjapanese': return 'EUC-JP'; // この行を追加 [EUC-JP文字化け問題対処] // return 'Extended_UNIX_Code_Packed_Format_for_Japanese'; // この行を削除
他の部分にどのような影響があるかはまだわからないのが、とりあえず解決。
トラックバック一覧
この記事にはトラックバックがついていません。