PHP5.4で入力した日本語が表示されなくなる時がある

古いバージョンのZen Cartについて不具合が見つかった場合はこちらで情報を共有してください。
アバター
竹村
記事: 39
登録日時: 2005/5/20 11:38
お住まい: 東京都

PHP5.4で入力した日本語が表示されなくなる時がある

投稿記事by 竹村 » 2013/11/26 14:52

PHP5.3系でZen Cartの v1.3.0.2-l10n-jp7 を利用していたのを PHP5.4.22 に変更したところ
一見、動いているように見えたのですが、
管理画面の商品管理で「入力→プレビュー→更新」としたら入力内容が消えました。

また、ユーザー側の会員登録で名前や住所を入力した後、配送方法選択の画面に遷移すると
住所の表示が下記のようになっていて名前は都道府県以外の住所が表示されてません。

 100-0006
 東京都
 
 Japan
 電話番号: 03-xxxx-xxxx


調べてみたら、↓これが原因のようですね。

PHP5.4のhtmlspecialcharsに非互換問題 | 徳丸浩の日記
http://blog.tokumaru.org/2011/11/php54htmlspecialchars.html

Zen Cart 1.3.0.2系では htmlspecialchars の第3引数に指定がありません。
かつ、内部文字エンコーディングが EUC-JP なのでこの問題が発生します。

現状考えられる対策は

1. Zen Cart v1.5.1 ja-RC1を利用する
2. 1.3.0.2のUTF-8版を利用する
3. PHP5.3系を使い続ける

という3択だと思うのですが、このうち 3番は2014年6月20日にはセキュリティFixが切れるでしょうし、
1番や2番のアップグレードをするのがかなり手間なので、現在EUC-JP版を使っているユーザーはちょっと心配ですね。

zen-cart.jpとしては、jp9パッチなどで PHP5.4 対応としてこの問題の対応をされたりしますでしょうか?
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: PHP5.4で入力した日本語が表示されなくなる時がある

投稿記事by kimono » 2013/11/27 16:25

こんにちわ。kimonoです。

その問題私も発見しており、htmlspecialcharsを全て変更して対応しました。
admin側で24ファイル69箇所、SHOP側で15ファイル30箇所該当箇所があります。
また、同様に携帯モジュールも動作しません。$_POSTの部分が問題です。

これらはどうしましょうかね~。
アバター
竹村
記事: 39
登録日時: 2005/5/20 11:38
お住まい: 東京都

Re: PHP5.4で入力した日本語が表示されなくなる時がある

投稿記事by 竹村 » 2013/11/28 14:05

こんにちは、竹村です。

kimono さんが書きました:その問題私も発見しており、htmlspecialcharsを全て変更して対応しました。
admin側で24ファイル69箇所、SHOP側で15ファイル30箇所該当箇所があります。

具体的な数字として表されると結構ありますね…

EUC-JPをどこまでサポートするかは判断が難しいところですね。


▼携帯モジュールの話

携帯モジュールは日本語版の公式パッケージには含まれないので一応別の話ですが、トピック分けるのもアレなので以下にて続けます。

kimono さんが書きました:また、同様に携帯モジュールも動作しません。$_POSTの部分が問題です。

あー、関数の引数に $_POST があるせいで PHP5.4 だと fatal error になる件ですね。

http://php.net/manual/ja/migration54.incompatible.php
スーパーグローバルをパラメータ名として使うと fatal error となります。
つまり function foo($_GET, $_POST) {} などのコードは使えなくなります。


とある案件の実装で↓こんな感じで修正しました。
includes/classes/ZenCart/Mobile.php より

コード: 全て選択

--- a/includes/classes/ZenCart/Mobile.php
+++ b/includes/classes/ZenCart/Mobile.php
@@ -311,7 +311,7 @@ class ZenCart_Mobile {
             ob_start("handleMobileOutputBuffering");
         }
     }
-    function countryNameConvert($_POST){
+    function countryNameConvert(){
         if($this->isMobile()){
             $country = $_POST['country'];
             $state = $_POST['state'];
@@ -323,7 +323,6 @@ class ZenCart_Mobile {
             $result = $this->db->Execute($query);
             $_POST['zone_id'] = $result->fileds['zone_id'];
         }
-            return $_POST;
     }
     /**


携帯モジュールはアークウェブでもサポート外になってしまったので、この件を含めフォローしてない状態です。
アバター
竹村
記事: 39
登録日時: 2005/5/20 11:38
お住まい: 東京都

Re: PHP5.4で入力した日本語が表示されなくなる時がある

投稿記事by 竹村 » 2013/12/06 16:25

▼携帯モジュールの話

あ、スミマセン。もう1箇所ありましたね。

竹村 さんが書きました:とある案件の実装で↓こんな感じで修正しました。
includes/classes/ZenCart/Mobile.php より

コード: 全て選択

--- a/includes/classes/ZenCart/Mobile.php
+++ b/includes/classes/ZenCart/Mobile.php
@@ -311,7 +311,7 @@ class ZenCart_Mobile {
             ob_start("handleMobileOutputBuffering");
         }
     }
-    function countryNameConvert($_POST){
+    function countryNameConvert(){
         if($this->isMobile()){
             $country = $_POST['country'];
             $state = $_POST['state'];
@@ -323,7 +323,6 @@ class ZenCart_Mobile {
             $result = $this->db->Execute($query);
             $_POST['zone_id'] = $result->fileds['zone_id'];
         }
-            return $_POST;
     }
     /**


これと、countryNameConvert()を呼び出している↓この部分も修正が必要です。
includes/classes/observers/ObserversCountryName.php より

コード: 全て選択

--- a/includes/classes/observers/ObserversCountryName.php
+++ b/includes/classes/observers/ObserversCountryName.php
@@ -17,7 +17,7 @@ class ObserversCountryName extends base{
        function update($oNotify,$sEventid,$aParams){
                if (($sEventid == 'NOTIFY_HEADER_START_CREATE_ACCOUNT')||$sEventid=='NOTIFY_HEADER_START_CHECKOUT_SHIPPING_ADDRESS'||$sEventid=='NOTIFY_HEADER_S
             global $mobile;
-            $_POST = $mobile-> countryNameConvert($_POST);
+            $mobile-> countryNameConvert();
         }
        }
 }
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: PHP5.4で入力した日本語が表示されなくなる時がある

投稿記事by kimono » 2013/12/11 10:34

こんにちわ。kimonoです :)

ご確認、ご連絡大変ありがとうございます>w<

もし、修正版とか作れるようであれば頑張ってみますです^^

“1.3.0.x公式版の不具合情報” へ戻る