この記事について
| 環境 | 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);
}
