PHPで絵文字を壊さずに文字コードや全角半角変換を行う方法
Tweet
通常「mb_convert_encoding」や「mb_convert_kana」を使うと、iモードやEZWebの絵文字(SJIS形式)は壊れてしまいます。
壊れてしまう例
$str = '絵文字[晴れ]';
$str = mb_convert_encoding($str, 'EUCJP', 'SJIS');
$str = mb_convert_encoding($str, 'SJIS', 'EUCJP');
// 出力
echo $str;
例:通常のコンバートの場合
しかしちょっとしたことで、絵文字の破壊を防ぐことができます。
文字コードを指定するときに
- SJIS
- EUC-JP
ではなく、
- SJIS-WIN
- EUCJP-WIN
を利用すればOKです。
以下がサンプルコードです。
文字コード変換のサンプル
$str = '絵文字[晴れ]';
$str = mb_convert_encoding($str, 'EUCJP-WIN', 'SJIS-WIN');
$str = mb_convert_encoding($str, 'SJIS-WIN', 'EUCJP-WIN');
// 出力
echo $str;
文字コード変換しても壊れません
全角→半角変換のサンプル
$str = '絵文字[晴れ]も半角化もダイジョウブ';
// 文字コードを設定
mb_internal_encoding('SJIS-WIN');
$str = mb_convert_kana($str, 'ak');
// 出力
echo $str;
半角変換しても平気です
なお、上記の例では、
- 「SJIS-WIN <> EUCJP-WIN」
となっていますが、
- 「SJIS-WIN <> UTF-8」
の変換でも特に問題はありません。
関連:
6月 17th, 2009 at 15:26:48
SJIS-WINやEUCJP-WINは正確には間違いです。
http://pentan.info/php/sjiswin_eucjpwin.html