input conversion failed due to input error
お気に入りのYouTube動画を紹介しあうというコンセプトのSmile Cafeを運営しており、モデレータさんが運営するブログであるMy Video Cafeに、最新の動画エントリを5件表示しています。
その仕組みは、まずXOOPS側で投稿動画の最新エントリをRSSで配信し、そのRSSを受信してXML/Unserializerで解析・整形するツールを経由して、Movable TypeがJavaScriptでHTMLに埋め込むという感じです。
しかし、先日ブログ側に最新の投稿エントリが表示されないという現象が発生し、原因を調査していると、RSSを解析しているツールが
input conversion failed due to input error, bytes 0xAD 0xA1 0×3C 0×2F
というエラーを吐き出していました。結局、原因は文字コードEUC-JPで動作するXOOPSから配信されるRSS内にUTF-8には変換できない文字が含まれていたため、PEARのXML/Unserializer.phpが途中終了していたというもの。原因となった文字は、メールでもお馴染みの丸数字でした。
しょーがないので、ツール側でXML/Unserializerに渡す前に、
$data = mb_convert_encoding($data, "UTF-8", "EUC-JP");
$data = str_replace("EUC-JP", "UTF-8", $data);
文字コードを無理矢理UTF-8に変換し、charsetをUTF-8に置き換えました。これで途中終了はなくなり、めでたく(?)丸数字は「?」と表示されるようになりました。
本来ならば、正しいコードに変換してあげるべきかもしれないのですが、文字コードに詳しいわけでもない上、動画の投稿者が一般のユーザさんであるため、今後どのような文字で同じ現象が発生するかが予測できないので、このような対処をさせてもらいました。
Filed under: プログラミング | No Comments »

