カテゴリ名など文字列を丸めると文字化けする EC-CUBEのバグ

EC-CUBEでは、文字列を丸める処理を
/data/class/util/SC_Utils.php

SC_Utils::sfCutString
で行っています。

このSC_Utils::sfCutStringは第3引数でバイト換算(true)か文字数換算(false)かを指定できます。

ここでカテゴリ管理のテンプレートなどで、次のようになっている箇所があります。

<!--{$disp_name|sfCutString:20|h}-->

このカテゴリ名は日本語文字(マルチバイト文字)のUTF-8で値が入るため、バイト単位だと端数が出て最後の文字が文字化けします。
UTF-8の1文字は2バイトではないからです。

このコードは正しくは、丸める文字数を半分にして、文字数換算にします。

<!--{$disp_name|sfCutString:10:false|h}-->

テンプレート内にあるsfCutStringはほぼこれに該当します。

テンプレートを書き換えるのが面倒であれば、SC_Utils::sfCutStringを拡張して、マルチバイトであれば文字数を半分にして、文字数換算で丸めるという手法もあります。

バイト数換算から文字数換算にすることの注意点として、半角文字も全角文字も1文字としてカウントされるため半角文字のみの場合は文字列の幅が狭くなります。
これを防ぐためには、バイト数換算のままにして文字の途中であれば、どちらかにずらすという処理にしたほうがいいです。

関連記事

スポンサーリンク

BITAND関数 ビットごとのAND

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る