Zen Cart1.3.0.2 EUC-JP版とPHP5.4の組み合わせで日本語(マルチバイト文字)が表示されない障害

以前からZen Cartを利用してきた方は、1.3.0.2のEUC-JP版を PHP5.3以前が稼働するウェブサーバーで運用してきたと思います。一方 PHP5.3系のセキュリティFixが2014年6月20日には終了する というアナウンスがあり、PHP5.4系にアップグレードしようと考えている方も多いでしょう。

弊社で試してみたところ Zen Cart1.3.0.2のEUC-JP版をPHP5.4の環境に入れると日本語が表示されなくなる場合がある という問題に遭遇しました。

これは、htmlspecialchars()を利用した出力をしている箇所で問題が発生します。
下記の記事が大変参考になります。

具体的には下記に示しますが、一見するとPHP5.4でうまく動いているように見えてしまうことがあります。フォームから日本語を入力してみると気がつくなど、この問題を知らないと対処が遅れてしまう可能性もあるのでご注意ください。

▲1.商品名や商品詳細に日本語で記述してある状態
(※図版はクリックで拡大します)

▲2.preview時はちゃんと表示されているが...
(※図版はクリックで拡大します)

▲3.更新すると消えてしまう
(※図版はクリックで拡大します)

▲1.会員登録で「秋葉テスト」で登録した
(※図版はクリックで拡大します)

▲2.登録完了画面【続ける】で配送先画面へ
3.東京都以外の住所と名前が消えてしまった
(※図版はクリックで拡大します)

PHPのバージョンを確認するには

Zen Cartの管理画面から「追加設定・ツール>サーバ情報のチェック」で『PHP バージョン』と書いてある箇所を調べます。

問題のないZen Cartのバージョンは?

Zen Cart 1.5系では、以下のように第3引数も強制的に指定するようになっているので、問題ありません。

 htmlspecialchars(stripslashes($value), ENT_COMPAT, CHARSET, TRUE)
 ※第3引数の「CHARSET」は includes/languages/japanese.php で指定。

1.3.0.2のUTF-8版もPHP5.4のhtmlspecialchars()のデフォルトがUTF-8なので、問題なく動きます。

対処方法

Zen Cartのバージョンアップ、トラブル対応は弊社でも対応可能です。
ご興味がありましたらお問い合わせください。