• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPで指定文字数で切りたい場合)

PHPで指定文字数で切りたい場合

このQ&Aのポイント
  • PHPで全角と半角の混在した文字列で文字数を切り詰める方法を教えてください。
  • mb_strcut関数を使って文字列を切り詰める方法を試みましたがうまく動作しませんでした。
  • 文字数を正確にカウントするためには、全角は1文字、半角は0.5文字として換算する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

Shift_JISの文字の中に、Windowsの機種依存文字のようなものが入ってませんか? もしくは改行コードを忘れていたりとか。 もし、機種依存文字((1)、(株)などといったやつ)が含まれているということであれば、「sjis-win」と指定してみて下さい。

susan-styl
質問者

お礼

ご回答ありがとうございます! 仰るとおりで改行文字が原因のようでした 改行文字を2バイト文字に変換して復元で期待の値になりました! ありがとうございます!

その他の回答 (2)

回答No.2

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文字になる際の文字列を教えていただけましたら、 こちらでも確認してみたいなと思いましたので、ご検討いただければ幸いです。

susan-styl
質問者

お礼

ご回答ありがとうございます! 改行文字が原因のようでした 改行文字を2バイト文字に変換して復元で期待の値になりました! ありがとうございます!

回答No.1

http://jp2.php.net/manual/ja/function.mb-strwidth.php こちらの、 mb_strwidth の関数が、 >マルチバイト文字は、通常はシングルバイト文字の倍の幅となります。 になるので、 全角 = 2 半角 = 1 で計算されると思いますので、 mb_strwidth('文字列') / 2 という形で算出することで期待の数値が得られるかと思うのですが、いかがでしょうか?? ご参考になれば幸いです。

関連するQ&A