カテゴリ名など文字列を丸めると文字化けする 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文字としてカウントされるため半角文字のみの場合は文字列の幅が狭くなります。
これを防ぐためには、バイト数換算のままにして文字の途中であれば、どちらかにずらすという処理にしたほうがいいです。
関連記事
- PostgreSQLでERROR: duplicate key value violates unique constraint "hoge_pkey" DETAIL: Key (id)=(10) already exists.と出る場合
- PostgreSQLで自動採番をするシーケンス(sequence)とは【AUTO INCREMENT】
- EC-CUBE2系で商品を大量にカートに入れると注文情報が抜けたりカートが消えたりする
- EC-CUBEのダウンロードページ(過去のバージョン)
- 新規ページを追加するとSC_Utils_Ex::sfChangeCheckBox()のエラーが出るときの対処法
- PostgreSQLからMySQL、MySQLからPostgreSQLの変更
- EC-CUBEのサーバ移行の方法
- EC-CUBEのバックアップ機能とリストア
- EC-CUBEでMySQLデータベースのデータ取得で文字化けするときの対処法
- ページごとのスタイルシート、JavaScriptを指定する方法
- テンプレートの編集
- 基本的な特徴
- DB設計を見直してEC-CUBEを高速化する
- 郵便番号データの登録/更新
- インストール 初期設定
- EC-CUBE
スポンサーリンク