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の様な気がする。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください