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

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

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

どもです。

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, 'Shift-jis', 'UTF-8');
$str = mb_strcut($str, 0 , $byte, "Shift-jis");
$str = mb_convert_encoding($str, 'UTF-8', 'Shift-jis');

ちょっと改良。

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

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

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

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