PHPで、配列をjsonに変換しようとjson_encode()を使用すると以下の様なエラーが出て怒られる
json_encode(): Invalid UTF-8 sequence in argument
文字コードは事前に変換していたので、UTF-8になっているはず。じゃぁ変換ミスかと思って確認してみても特に問題がなさそうに見えなくない。でも、変換できない。困ったというお話
で、調べてみると以下の様なブログ記事を発見。
seh. phpでutf-8として不正な文字コードを削除したい
よくわかっていないながら、ざっくり言うと。一見UTF-8に見えている対象の文字列に変な文字コードが混入することがあるという話。なので、前記のブログではUTF8出会ったとしても改めてもう一回UTF8に変換すると回避できますよねという結論らしい。
以下例示
// 別にこの文字列で再現するわけではない
$str = "サンプルの文字列";
// 本来はこれで十分なはずなんだけど、変な文字コードが混ざることがある?
$str_utf8 = mb_convert_encoding($str, "utf8", "auto");
// なので、改めてもう一回utf8に変換する
$str_utf8 = mb_convert_encoding($str, "utf8", "utf8");
他の例示として、以下の様な記述もあったけど、こちらは試してない
$str = iconv('UTF-8', 'UTF-8//IGNORE', $str);