postgresでノーブレークスペースがインサートできなくて困ったのでメモ。
状況
phpの開発でpostgresを利用し、ckeditorで編集した文字列を突っ込もうとしたらこんなエラーがでた。
character 0xc2a0 of encoding "UTF8" has no equivalent in "EUC_JP"
原因はデータベースの文字コードがEUC-JPでphp側がUTF-8だったため。
エディタで編集した時にノーブレークスペースが混ざり、
postgresが自動エンコードする際にエラーが出てしまい、Insertできなかった。postgresの仕様でこの仕様自体は変更できない模様。
解決方法
php側でEUC-JPに変換するのは面倒臭かったので、
ノーブレークスペースを半角スペースに変換することを思いついた。
使うのはこの関数
mb_ereg_replace
マルチバイトで判定して置換してくれる!めったに使わないだろうけど、あってよかった!
インサートしたいデータをこんなかんじで置換する。
$str = mb_ereg_replace(“\xC2\xA0″, “ ”, $str);
めでたくインサート出来ました!