ブログの内容をAPIから取得し、UTF-8環境のPHP・MySQL環境でinsertしようとした所、以下のようなエラーがでてしまった。
Incorrect string value: 'xxxxx...' for column 'カラム名' at row 1
どうやらMySQLがinsertする文字列の文字コードがおかしいからフザケンナとか何とか言いたがっているようだ。
詳しく調べてみた所、どうやらAPIで取得したブログの記事中に絵文字が含まれており、そいつの文字コードがMySQL的にはヤメロヨモーって感じらしい。
そういえばブログって絵文字対応している所多いし、絵文字って外字なんだっけ。
今回の用途的には、絵文字をこちらのDBに取り込んだ所で大した利益も無いので、除去してしまうのが一番手っ取り早いと考え、変な文字は消してしまう事にした。
色々ぐぐると、なんぞ色々な情報がでてきたんだけど、試してみると、うまくいったりいかなかったり・・・
結局、以下のような感じで落ち着いた。
$str // 外字が含まれているUTF-8の文字列 mb_substitute_character("none"); $str = mb_convert_encoding($str, "CP932", "UTF-8"); $str = mb_convert_encoding($str, "UTF-8", "CP932");
ちなみにmb_internal_encodingはUTF-8で、$strの元ネタはCP932だったヤツ。
ちょっと心配もあるけど、無事除去されてくれた。
Comments are closed.