invalid byte sequence for encoding "UNICODE": 0xeda0bd
のようなエラーが頻発してしまいます。
Twitterで該当のつぶやきを検索してみると、
・顔文字
・ハートなどの特殊な絵文字
が含まれており、その部分でエラーになっているようです。
エラーの意味合いとしては、登録しようとした文字がUNICODEには無いということだと思うのですが、DBに登録する前にmb_convert_encodingで文字コードを変換してから登録しているのに何故エラーになってしまうのかが分かりません。。
ちなみにOAuthの認証用ライブラリは「twitteroauth」を使用しています。
どうしたらエラーにならずに登録出来るのか、ご存知でしたら教えてください。
よろしくお願いいたします。
ちなみに、使用DBはPostgreSQL7.4.16です。
DBの文字コードはUNICODE、phpプログラムの文字コードはUTF-8です。
エラーになるバイト文字は「0xeda0bd」「0xeda0bc」がほとんどのようです。
これらの文字は何なのでしょうか?
参考になるかどうかわかりませんが。
https://dev.twitter.com/discussions/10264
http://hirakun.blog57.fc2.com/blog-entry-215.html
サロゲートペアの処理が上手く行ってない感じ?
php内部はutf-8っぽいのでjson周りの問題なのかな?
php自体なのかライブラリとかのバージョンの問題なのか。
Normalizer::normalizeとか通すと修正されたりしないだろうか。
よくわからないのでコメントで。
頭の中は「さろげーと?」という感じですが…後程勉強したいとおもいます。
>fiwaさん
参考リンクありがとうございます。
海の向こうにも同じ問題に悩む方がいらっしゃったのですね。
何か同じ問題を抱えた人が集まって、結局まだ解決してないみたいですね…
>TransFreeBSDさん
当方のphpのバージョンが5.2.1(古い…)なので、Normalizerは使えないみたいですね。
頂いた情報を元に、「php」「json」「サロゲートペア」などで検索かけてみたところ、確かにjson周りがあやしい気がします。
=======================
■json_decode はサロゲートペアの範囲の不正な文字を正しく処理できない
http://blog.sarabande.jp/post/53105703766
■json_encode、json_decode の不正なバイト列処理改善の改訂版
http://blog.sarabande.jp/post/53799156387
■PHPでサロゲートペアをJSONで扱うときのバグ。
http://pdfbjj.blogspot.jp/2013/04/phpjson.html
=======================
APIの実行結果を取得するときにjson_decodeを使っているんですよね…
php5.2.1で、json_decodeを使わないで上手いこと処理する方法は無いものでしょうか…
♥️✨
絵文字は豆腐になってもいいので、エラーにならずにDBに登録したいのですが、いい手はないでしょうか。
しかし若いおじょうさん方はどうやって「キラキラ」だの「桜のマーク」だのを入力しているのでしょうか…
というところまでを1個前のコメントで書いたのですが、豆腐までしか表示されてないですね…
♥️
http://www.charbase.com/2764-unicode-heavy-black-heart
✨
http://www.charbase.com/2728-unicode-sparkles
絵文字がブラウザによって表示が違うという話なら、例えばこういったものがあります。
https://groups.google.com/forum/#!topic/pcfanml/UZckxKVxMd8
ちなみに私の環境からは上のコメントはこんな風に見えてます。
http://f.hatena.ne.jp/fiwa/20131220193100
表示は正直どうでもいいです。
エラーにならないでDBに登録するのが最終目的です。
http://magp.ie/2011/01/06/remove-non-utf8-characters-from-string-with-php/
バイト列をもとに問題になりそうなnon-UTF8な文字を抽出して、?に置き換えているようです。
例によって参考になるかどうかは定かではありせんが、とりあえずお知らせまで。
http://stackoverflow.com/questions/7502164/replacing-non-utf8-characters
参考ページのご紹介ありがとうございました!
iPhoneから絵文字を使ってツイートした時にDB登録エラーが再現出来たのですが、
教えて頂いたページの方法を使ったら、エラーにならないで「?」で登録できました!
本当にありがとうございました!