バージョン選択

フォーラム

メニュー

オンライン状況

46 人のユーザが現在オンラインです。 (35 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 46
もっと...

サイト内検索

 > 管理機能 > 2系でPostgreSQL(EUC-JP)環境で郵便番号DB登録する際の文字コード変換

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 2008/1/27 4:31
対応状況: −−−
2系でPostgreSQL(EUC-JP)環境で郵便番号DB登録する際の文字コード変換
CPI等のレンタルサーバで2系をインストールする場合、
PostgreSQLの文字コードがEUC-JPだったりするので
そのままでは郵便番号DB登録機能が使えません。
(変換マップの都合上)

そこで0xe3809c等の特殊文字をEUC-JPで利用できる物に変換してやる必要があるのですが、
とりあえず2系付属の郵便番号データが動くだけのカスタマイズをしてみました。
念のために半角カナも全角カナに直します。

data/class/pages/admin/basis/LC_Page_Admin_Basis_ZipInstall.php

106 + $search = array('〜', '−');
107 + $replace = array('〜', '-');
108 while (!feof($fp)) {

116 - $sqlval['state_kana'] = mb_convert_kana($arrCSV[3], "KV");
116 + $sqlval['state_kana'] = mb_convert_kana($arrCSV[3], "KV");
117 - $sqlval['city_kana'] = mb_convert_kana($arrCSV[4], "KV");
117 + $sqlval['city_kana'] = mb_convert_kana($arrCSV[4], "KV");
118 - $sqlval['town_kana'] = mb_convert_kana($arrCSV[5], "KV");
118 + $sqlval['town_kana'] = mb_convert_kana($arrCSV[5], "KV");
119 - $sqlval['state'] = str_replace($search, $replace, $arrCSV[6]);
119 + $sqlval['state'] = str_replace($search, $replace, $arrCSV[6]);
120 - $sqlval['city'] = str_replace($search, $replace, $arrCSV[7]);
120 + $sqlval['city'] = str_replace($search, $replace, $arrCSV[7]);
121 - $sqlval['town'] = str_replace($search, $replace, $arrCSV[8]);
121 + $sqlval['town'] = str_replace($search, $replace, $arrCSV[8]);


PostgreSQLの場合、レンタルサーバで割り振られたデータベースの文字コードが変換できないのが悪いと言えば悪いのですが。

もうちょっとMySQL使用時のパフォーマンスが上がれば素敵ですね。


ちなみにSC_DbConn内のコンストラクタ内で下記の宣言をしてやると
2系+EUC-JP環境のPostgreSQLを使用する際もインストール時のエラーを回避できたりします。

$this->conn = $objDbConn;
+ if ($this->conn instanceof DB_pgsql) {
+ $this->conn->query("SET NAMES 'utf8'");
+ }

ゲスト
投稿日時: 2008/1/27 4:39
対応状況: −−−
Re: 2系でPostgreSQL(EUC-JP)環境で郵便番号DB登録する際の文字コード変換
元ソースの表記間違えてました。
失礼しました。
正しくは下記の変更です。

116 - $sqlval['state_kana'] = $arrCSV[3];
116 + $sqlval['state_kana'] = mb_convert_kana($arrCSV[3], "KV");
117 - $sqlval['city_kana'] = $arrCSV[4];
117 + $sqlval['city_kana'] = mb_convert_kana($arrCSV[4], "KV");
118 - $sqlval['town_kana'] = $arrCSV[5];
118 + $sqlval['town_kana'] = mb_convert_kana($arrCSV[5], "KV");
119 - $sqlval['state'] = $arrCSV[6];
119 + $sqlval['state'] = str_replace($search, $replace, $arrCSV[6]);
120 - $sqlval['city'] = $arrCSV[7];
120 + $sqlval['city'] = str_replace($search, $replace, $arrCSV[7]);
121 - $sqlval['town'] = $arrCSV[8];
121 + $sqlval['town'] = str_replace($search, $replace, $arrCSV[8]);
ゲスト
投稿日時: 2008/1/27 4:42
対応状況: −−−
Re: 2系でPostgreSQL(EUC-JP)環境で郵便番号DB登録する際の文字コード変換
更に追記です。

106 + $search = array('〜', '−');
エディタ次第では上記部分が下記のように表示されるかもしれません。
106 + $search = array('?', '?');

その場合は特殊文字がしっかり表示できるエディタを使用してください。
ramrun
投稿日時: 2008/1/28 9:12
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
Re: 2系でPostgreSQL(EUC-JP)環境で郵便番号DB登録する際の文字コード変換
SET NAMESの話がでていたのでお借りして。

yohgaki's blog:SET NAMESは禁止
OpenPNE Trac:SET NAME で常にエラーが発生している
gihyo.jp:残り一年! PHP4からPHP5への移行

EC-CUBEではそもそもSET NAMESを使っていませんが、MySQLで使用される方は私も含め、意外とSET NAMESでなんとかしちゃってる人も多いと思います。

詳細はわかりませんが、SQLインジェクションでまずいことがあるみたい。

gihyo.jpに掲載の対策で足りるのかどうかわかりませんが、一応情報提供ということで。


追記:投稿時、変になったので編集しようとしたらいつのまにかログアウトされてしまったようで、↓の同じ投稿(ゲスト)は私です(汗)。
ゲスト
投稿日時: 2008/1/28 9:16
対応状況: −−−
Re: 2系でPostgreSQL(EUC-JP)環境で郵便番号DB登録する際の文字コード変換
SET NAMESの話がでていたのでお借りして。

yohgaki's blog:SET NAMESは禁止
OpenPNE Trac:SET NAME で常にエラーが発生している
gihyo.jp:残り一年! PHP4からPHP5への移行

EC-CUBEではそもそもSET NAMESを使っていませんが、MySQLで使用される方は私も含め、意外とSET NAMESでなんとかしちゃってる人も多いと思います。

詳細はわかりませんが、SQLインジェクションでまずいことがあるみたい。

gihyo.jpに掲載の対策で足りるのかどうかわかりませんが、一応情報提供ということで。
ゲスト
投稿日時: 2008/1/29 12:56
対応状況: −−−
Re: 2系でPostgreSQL(EUC-JP)環境で郵便番号DB登録する際の文字コード変換
トピ主です。

SET NAMES危なかったのですね…。
勉強になりました。

ざっとPEAR::DB読んでみたのですが、
処理を加えるとしたら/DB/pgsql.phpの292行目辺りが妥当でしょうかね。
factoryからもconnectからも呼ばれますし。

pg_set_client_encoding(UNICODE);
もしくは
pg_set_client_encoding($this->connection, UNICODE);

動作未検証です。(SET NAMES部分は削除で)

/DB/mysql.phpでも同じような箇所に処理追加すればOKかな。


PEARライブラリはあんまり書き換えたくないですが、ExtendしてないしPEAR::DB使ってるのでしょうがないかな…と?
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,883名です
総投稿数は110,000件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.