mysql等データベースに入った数値文字参照の文字列をUTF-8に変換する場合、mysql単体では無理なのでPHPを併用する。
数値文字参照を普通の文字に変換するPHP
——————————————————
$moji = mb_convert_encoding($moji, ‘UTF-8’, ‘HTML-ENTITIES’);
——————————————————
データベースから文字を取り出して、PHPで変換してUPDATEすればいい。
しかし文字列全てに対してmb_convert_encodingを行うと、希望しない文字まで変換してうまくいかないケースが出た。そこで数値文字参照の値にのみ変換をかけることにした。
文字列中の数値文字参照の値にのみ変換をかけるPHPサンプルコード
——————————————————-
//数値文字参照「&#~;」のみを拾う
preg_match_all (‘/&#(.+?);/us’,$string,$match);
foreach ($match[0] AS $moji1) {
echo “変換する文字:” . $moji1;
//数値文字参照をUTF-8に変換
$moji2 = mb_convert_encoding($moji1, ‘UTF-8’, ‘HTML-ENTITIES’);
//数値文字参照とUTF-8を置き換える
$string = str_ireplace($moji1,$moji2,$string);
}
——————————————————-