PHP:商品名を指定文字数以下に丸める
文字列を丸めてオーバーフローを解決
楽天市場やヤフーショッピング等、出品するとよくあるのが文字数のオーバーフローです。
特に、メーカーからもらった商品りすとの商品名にSEOワードをくっつけて出品しようとした時よく起こりますね。記載するワード数を少なくして対応するのが通常ですが、システム化して一気にワードを付けようとすると全てのワード数を少なく調整する必要があり、記載ワードの幅が狭くなってしまいます。
オーバーフローした時だけ動作する仕組みを構築する
そうすれば問題解決です。
mb_strimwidth()
検索で一番沢山HITする文字の丸め方です。一発で処理できるのでとても便利。
$text = "Hello World"; echo mb_strimwidth($text, 0, 10, "..."); // "Hello W..." と出力します。
全体の文字数を指示すると、丸める文字列(例の場合 3byte)を含めて文字数を指示数に調整します。
この関数では全角=2byte、半角=1byteとしてカウントするようで誤差が出る事があるとの事。でも参考資料を見る限りそれほど気にしなくてよさそうです。
strlen('abc') --> 3
strlen('あいう') --> 6
strlen('abcあいう') --> 9
mb_strcut()
バイト数の誤差を気にする場合はこの関数を利用。関数1つで処理は終わらないため式を組合わせる必要があります。
$text = "Hello World";
//丸める文字を指定
$trim_m = "...";
//場合分けで処理を指示
IF(strlen($tezt)<= 10){
}else{
$anser = mb_strcut($text,0,10,"UTF-8").$trim_m;
}
echo $anser;
//”Hello Worl...”と出力します。
第三因子に丸める数を記載しますが、mb_strimwidth() と異なり丸める文字列の数を含まず取り出します。その為、例では13byteの文字列となります。
まとめ
圧倒的にmb_strimwidth()が簡単。バイト数オーバーが気になる様であれば、事前に(最大値-1)などの処理を入れておけばOKの様な気がする。


