[PHP-users 34591] 変換不能文字の数値エンティティ化

clicker @ fooo.cjb.net clicker @ fooo.cjb.net
2009年 5月 27日 (水) 17:00:04 JST


初めまして武山と申します。

mb_convert_encodingで変換することができない文字は、
mb_substitute_characterで設定された文字へ変換されますが、
これを固定の文字ではなく、HTML数値エンティティ表現にできる方法を
ご存知の方、いらっしゃいませんでしょうか。

現在、以下のように行っているのですが、どうしても変換不能文字が
出てきてしまいます。

$convmap = array(
    //0x0000, 0x007F, 0, 0xffff,  // 基本ラテン文字 (ASCII互換)
    0x0080, 0x00FF, 0, 0xffff,  // ラテン1補助
    0x0100, 0x017F, 0, 0xffff,  // ラテン文字拡張A
         : (長いので省略 参考→http://ja.wikipedia.org/wiki/Unicode)
);
$text = mb_encode_numericentity($text, $convmap);
$text = mb_convert_encoding($text, 'SJIS-win', 'UTF-8');

なお、携帯向けのコンテンツのためShiftJISへ変換しています。
SEO的なところを考慮して、可能な限り数値エンティティではないSJIS文字を
出力したいと考えています。

また携帯電話が全てのunicode数値エンティティを表示できるわけではない
ことは了承しております。アラビア語とかは無理でもカフェのeは表示してあげて、
さらにハングル文字なら対応機種だけで表示できれば良いという考えです。

---
武山
clicker @ fooo.cjb.net


PHP-users メーリングリストの案内