ど素人から毛を生やす。<延>

Utf-8では全角文字が3byteだけど、2byte扱いで切り取りたい。

Web > PHP 2017年9月15日(最終更新:6年前)

2017年9月15日に作成されたページです。
情報が古かったり、僕が今以上のど素人だった頃の記事だったりする可能性があります。

どもです。

CSV出力したり、他サイトとデータのやり取りをしたいとき、
Utf-8では全角文字が3byteですが、2byte扱いで切り取りたい場合があります。

そういうときの解決法。


$str = mb_convert_encoding($str, 'SJIS', 'UTF-8');
$str = mb_strcut($str, 0 , $byte, 'SJIS');
$str = mb_convert_encoding($str, 'UTF-8', 'SJIS');

SJISに一度変換してから、SJISとしてmb_strcutを使用するわけです。

でもこれ、いわゆる機種依存文字が来ると死にます。


$str = mb_convert_encoding($str, 'SJIS-win', 'UTF-8');
$str = mb_strcut($str, 0 , $byte, 'SJIS-win');
$str = mb_convert_encoding($str, 'UTF-8', 'SJIS-win');

ちょっと改良。

文字数をカウントするだけなら


strlen(mb_convert_encoding($str, 'SJIS-win', 'UTF-8'))

で特に問題ないんだけどなー!
変換するのはいろいろ怖いからあんまりやりたくないなー。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (`・ω・´) 役に立った (0)
  • (・∀・) 参考になった (1)