ちょっと先の未来クイズ第4問

MySQLデータベース上にlatin1の文字列データが格納されています。このデータは、具体的には&#nnnnn;のような10進型文字参照の連続です。ウェブアプリケーションを介してブラウザー上では日本語、中国語、アラビア語その他言語の文字列として表示されます。

このデータをUTF-8に変換し、新たなフィールドに格納するためには、どのようにしたら良いでしょうか。MySQLだけで平易に解決できるならそれに越したことはないのですが、PHPまたはASP.NETによるソリューションでも構いません。

A 回答 (1件)

MySQLだけでは、難しいでしょう。


php4.0.6以降なら mb_decode_numericentity ( $string, $convmap, 'utf8' )
でHTML 数値エンティティから、指定文字エンコードの文字列に変換してくれます。
16進数でも10進数表現でも大丈夫のようです。
詳しい使い方は、マニュアルを参照して下さい。
http://jp.php.net/manual/ja/function.mb-encode-n …

テスト例:mysqlとの連携は前後で適宜行って下さい。
<?php
//このソースはutf8で保存して、出力をutf8にするよう、phpの設定をしておいて下さい
$str = '㈠㈪㈱㈾㉁';
// (一)(月)(株)(資)(休)
print '<ul><li>数値文字参照:' . $str . "\n";
$ss = entity_to_utf($str);
print '</li><li>utf 文字:'. $ss . '</li></ul>';

function entity_to_utf($str){
$convmap = array ( 0x0000, 0xffff, 0x0000, 0xffff );
return mb_decode_numericentity ( $str, $convmap, 'utf8' );
}
?>
    • good
    • 0
この回答へのお礼

ああ、こんな関数があるんですね。さすがPHP。マニュアルを研究してみます。MySQLとの連繋でまた質問するかもしれませんが、今回はありがとうございました。

お礼日時:2008/08/23 11:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


おすすめ情報