- ベストアンサー
PHPで指定文字数で切りたい場合
- PHPで全角と半角の混在した文字列で文字数を切り詰める方法を教えてください。
- mb_strcut関数を使って文字列を切り詰める方法を試みましたがうまく動作しませんでした。
- 文字数を正確にカウントするためには、全角は1文字、半角は0.5文字として換算する必要があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Shift_JISの文字の中に、Windowsの機種依存文字のようなものが入ってませんか? もしくは改行コードを忘れていたりとか。 もし、機種依存文字((1)、(株)などといったやつ)が含まれているということであれば、「sjis-win」と指定してみて下さい。
その他の回答 (2)
- blue-goheimochi
- ベストアンサー率72% (39/54)
No.1です。 すみません。。回答が見当違いでした。 文字数を取得したいのではなく、文字をカットしたいお話でしたね。 早とちりしました。申し訳ないです。。 ちなみに、私の環境では、 ----------------------------------------------- $str = mb_convert_encoding($str,'shift-jis','utf-8'); $str = mb_strcut($str,0,1000,'shift-jis'); $str = mb_convert_encoding($str,'utf-8','shift-jis'); ----------------------------------------------- を実行したところ、 全角・半角を混ぜたいろいろな文字列で試させていただいたのですが、 文字数が500もしくは499.5の値に落ち着きまして、 512文字の値になることはありませんでした。。 (質問者様の要望を満たす条件であれば、このやり方が正解なのかな・・・思います。) よろしければ、512文字になる際の文字列を教えていただけましたら、 こちらでも確認してみたいなと思いましたので、ご検討いただければ幸いです。
お礼
ご回答ありがとうございます! 改行文字が原因のようでした 改行文字を2バイト文字に変換して復元で期待の値になりました! ありがとうございます!
- blue-goheimochi
- ベストアンサー率72% (39/54)
http://jp2.php.net/manual/ja/function.mb-strwidth.php こちらの、 mb_strwidth の関数が、 >マルチバイト文字は、通常はシングルバイト文字の倍の幅となります。 になるので、 全角 = 2 半角 = 1 で計算されると思いますので、 mb_strwidth('文字列') / 2 という形で算出することで期待の数値が得られるかと思うのですが、いかがでしょうか?? ご参考になれば幸いです。
お礼
ご回答ありがとうございます! 仰るとおりで改行文字が原因のようでした 改行文字を2バイト文字に変換して復元で期待の値になりました! ありがとうございます!