PHP:商品名を指定文字数以下に丸める
文字列を丸めてオーバーフローを解決
楽天市場やヤフーショッピング等、出品するとよくあるのが文字数のオーバーフローです。
特に、メーカーからもらった商品りすとの商品名にSEOワードをくっつけて出品しようとした時よく起こりますね。記載するワード数を少なくして対応するのが通常ですが、システム化して一気にワードを付けようとすると全てのワード数を少なく調整する必要があり、記載ワードの幅が狭くなってしまいます。
オーバーフローした時だけ動作する仕組みを構築する
そうすれば問題解決です。
mb_strimwidth()
検索で一番沢山HITする文字の丸め方です。一発で処理できるのでとても便利。
1 2 3 |
$text = "Hello World"; echo mb_strimwidth($text, 0, 10, "..."); // "Hello W..." と出力します。 |
全体の文字数を指示すると、丸める文字列(例の場合 3byte)を含めて文字数を指示数に調整します。
この関数では全角=2byte、半角=1byteとしてカウントするようで誤差が出る事があるとの事。でも参考資料を見る限りそれほど気にしなくてよさそうです。
1 2 3 |
strlen('abc') --> 3 strlen('あいう') --> 6 strlen('abcあいう') --> 9 |
mb_strcut()
バイト数の誤差を気にする場合はこの関数を利用。関数1つで処理は終わらないため式を組合わせる必要があります。
1 2 3 4 5 6 7 8 9 10 |
$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の様な気がする。
-
前の記事
PHP:amp;の正体とデコード 2018.09.15
-
次の記事
Wowma!API APIキー取得方法と設定について 2018.09.20
コメントを残す