HTMLエンティティ(数値文字変換)
2010/02/19
数値文字参照という手段をとって、文字を特殊な数字へ変換する方法もあります。前述のhtmlentities()は、PHPの設定に従って、シングルコーテーションをHTML上で表示できる特殊文字に変換していますが、これはシングルコーテーションなどのHTML上でマークアップに使用していて通常では表示できない文字だけを変換するもので、すべての表示文字を数値に変換することを、数値文字変換と言います。
これはフォーム送信の値だけじゃなく、ソース上に表示したくない文字などをこれで変換しておけば、ソースを見ただけでは実態が分かりにくいけど、表示上は何も問題がないことから、ホームページ上にメールアドレスを載せたいけど、スパムメールが怖いときなどに数値文字変換して載せる場合もあります。
ただ残念なことに、完全な数値文字参照の変換をする関数はPHPには存在しません。
PHPで
print mb_convert_encoding("あいうえお", 'HTML-ENTITIES', 'UTF-8');
などを書けば、日本語などについては数値文字変換できるのですが、英字には対応していません。
mb_encode_numericentity()という関数を使えば英字についても数値文字変換ができますが、この関数の引数の一つのconvmapというものが、ちゃんと文字コードを理解していないと使い難いものなのです。とりあえずメールアドレスで使用するならば、
print mb_encode_numericentity('info@makerseed.com', array(0x0000, 0xffff, 0, 0xffff), 'UTF-8');
と書けば、無事変換できると思います。
※第3引数の文字コードは、ホームページの文字コードにあったものを指定して下さい。