ちょっと気になったので、mb_convert_encoding で外字がきちんとコード変換されるか確認してみました。
Windowsの外字エディタで外字を登録して、mb_convert_encoding()を使って sjis-win、utf8、utf16 それぞれに変換後、文字コードを出力してみました。
SJIS:F040(unicode:E0000)
■SJISから変換
sjis-win: f040
utf8: ee8080
utf16: e000
■UTF-8から変換
sjis-win: f040
utf8: ee8080
utf16: e000
SJIS:F9FC(unicode:E757)
■SJISから変換
sjis-win: f9fc
utf8: ee9d97
utf16: e757
■UTF-8から変換
sjis-win: f9fc
utf8: ee9d97
utf16: e757
きちんと変換されています。
ただ、ブラウザに表示すると IEではクライアントPCに登録されている外字がきちんと表示されますが、Chromeでは正常に表示されず□で表示されました。(HTML上かブラウザの設定で表示させる方法があるのかも。)
データとして取り扱うには問題なさそうですね。
(あれっ?システムの外字対応の為に、PHPソースやDBの文字コードは、UTF-8でも問題ない?)
ちなみに、文字コードの16進数表記は bin2hex() 関数を使用しました。(ぐるぐる回してord()関数の結果を接続する方法より簡単です。)
では。