PHPのjson_encodeがUTF-8がエラーになってしまう

PHPでjson_encodeがUTF-8を指定していてもなぜか以下のエラーになる場合があります。

PHP Warning: json_encode() Invalid UTF-8 sequence in argument

文字コードの変換が終わっているはずなので、
変換がうまくいっていない様子です。

文字コードを確認してみるとちゃんとUTF-8になっている!
ということはもうバグですよね。

SPONSORED LINK

不正文字列の除去

どうやら「不正な文字列が含まれてしまっているよ」というエラーなので、
回避する方法としてもう一回UTF-8でエンコードしてあげる必要があるみたいです。

少し気持ち悪いですが。

$hoge = mb_convert_encoding($str, "utf8", "auto");
$hoge = mb_convert_encoding($str, "utf8", "utf8"); //もう一回

これでエラーはでなくなりました。
文字コードが一度目だけでは完璧に変換しきれないのでしょうか?
それとも見えないゴミが残ってしまうのかもしれません。

関連トピック

php

PHPエラー対処法 First argument should be an array

[code] First argument should be an array [/code] このエラーは、 最初の引数

Database

MySQLでTAG機能としてタグ付けを実装するデータベース設計を考える

ブログなどでも「タグ機能」って便利ですよね。カテゴライズとはまた違うタグ機能をMySQLを使って設計する時に、どのように実装するかを検討

apk_android

Androidアプリのapkを解析してソースコードを見れるの?

Androidアプリを解析する方法が気になって調べてみると、とても簡単に解析できてしまうことに驚きます。 もちろん難読化といった処置を

Random

MySQLのrand()ランダム関数の負荷問題を考えてみる

MySQLで結構使う場面が多いランダム関数rand()ですが、間違った指定をするとデータベースに思わぬ負荷をかけることになります。 今

Way

JavaScriptでUA判別してスマホとタブレットを振り分ける方法

JavaScriptを使用してUAでiPhoneやAndroidのスマホを判定したり、増加傾向にあるタブレットを判別する方法メモ。 U

Post

PHPでPingを送信する方法を関数化する

PHPを使ってサイトの更新情報などをPINGサーバーに送信する方法とその関数化です。 PINGの仕組みは、サイトの情報を記載したXML

mysql

MySQL INSERT エラーNo.1064 の原因と対処方法メモ

MySQLへのINSERT時などに構文エラー1064が発生した場合は、 使用できない文字が混入しているという原因がほとんどです。 誤

Yesterday

PHPのdate関数で日付「昨日・明日・1時間前」を取得しよう!

PHPのdate関数を使えば自分の取得したい日付を1行でズバッと指定できます。 もう簡単すぎて、プログラムというよりは言葉で伝えてあげ

公開日:2014/02/19