【mysql】数値文字参照をUTF-8の文字に変換する

この記事について

環境PHP、mysql
目的データベースに入った数値文字参照の文字列をUTF-8に変換する
結果mb_convert_encoding($moji, ‘UTF-8’, ‘HTML-ENTITIES’) で変換してUPDATEする

つまずきポイント要約

  • 文字列全体に変換をかけると希望しない文字まで変換されるケースがある→preg_match_allで「&#~;」だけ拾って変換

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);

}
タイトルとURLをコピーしました