2013年7月7日日曜日

CS-Cart CSVエクスポートした際に一部unicodeで表示される

CS-Cart V3系でエクスポートすると下記のデータがunicodeで表示されます。

注文CSVの「Extra fields」
注文商品CSVの「Extra」
ユーザーCSVの「Extra fields」

これは一見すると「文字化け=バグ」と思われがちですが、CSV出力の仕様変更による物です。
(一部でunicodeで出力されるようになりました。)

ここもマルチバイト文字列で出力したい場合下記の対応が必要となります。(一例です)

#PHP6で採用される予定の関数「unicode_encode」を事前採用する方法を示します。

1
//unicodeエスケープ
if(!function_exists('unicode_encode')){
    function unicode_encode($str) {
    return preg_replace_callback("/\\\\u([0-9a-zA-Z]{4})/", "encode_callback", $str);
    }
    //unicodeエスケープ用
    function encode_callback($matches) {
    $char = mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UTF-16");
    return $char;
    }
}

上記関数を任意の箇所で定義。(my_changes 等)

2
フックポイントで動作する下記関数を定義。(my_changes 等)

//フックポイントで動作する関数
//fn_set_hook('exim_mod_char_code', $csv);
function fn_ap_rt_orders_csvs_exim_mod_char_code($csv){
    $csv = unicode_encode($csv);
    return $csv;
}

ini.phpファイルの設定もわすれず。

fn_register_hooks(
    'exim_mod_char_code'
);


以上。

※弊社のCSVカスタマイズでは必ずこの対応をしています。
ーーーーー
ホームページ制作の株式会社あんどぷらす mmochi

0 件のコメント:

コメントを投稿