文字コード周りについての質問です。

PHP3(SJIS)で構築されていたシステムの会員データを
PHP4(EUC)の新システムへ移行することになったのですが、
保存されている会員情報は
 ・一件ずつURLエンコードされている
 ・SJISとEUCのデータが混在している
 ・ハシゴ高、崎の旧字体(山+立+可)等の機種依存文字も混入
 ・記号のエスケープもされていない
という現状で、どこから手をつけるべきかと困惑しています。
URLエンコードからの抽出、SJISとEUCのデータの振り分けまではなんとかなりそうなのですが
崎の旧字体等はPHPで出力させる際、以降の字を巻き添えに文字化けしてしまいます。

なんとか、文字化けや破損の無い状態で出力させる方法・アイデアはありませんか?
例として、正常に出力したいURLエンコード文字列(EUC)を挙げておきます。⇒「%C8%F8%94%B3」

回答の条件
  • 1人10回まで
  • 200 ptで終了
  • 登録:2006/06/06 18:58:39
  • 終了:2006/06/13 19:00:04

回答(8件)

ただいまのポイント : ポイント11 pt / 200 pt ツリー表示 | 新着順
ちょっと方向性がかわってしまいそうですが… ししゃ2006/06/06 23:48:16ポイント2pt
問題になっている文字を外字とみなして、何か自分で決めたコードに変換しておき、 表示時にそのコードを見つけたら、文字の画像に変換する形はいかがでしょうか…
考えましたが… swd2000gt2006/06/06 23:54:48
ありがとうございます。 その手も浮かんだのですが、如何せん会員情報データですので なるべく別の文字に変える等の処理はせずに解決したかったのです。
難しいかと 成瀬2006/06/06 19:51:03ポイント4pt
結論からいえば、難しいとおもいます。 そもそも前提として、PHPで変換可能な、機種依存文字を含むEUC (eucJP-win) と、IEの機種依存文字を含むEUC (CP51932) が異なっています。また、CP51932 は Windowsの機種依存文字を含むShift_JI ...
ですよね swd2000gt2006/06/06 20:02:18
丁寧な回答ありがとうございます。 一口にEUCといっても色々あるようで通常の2バイトEUCでは機種依存な拡張文字を扱えないんですよね。 完全にデータを移行するには(今後のためにも)UTF8化は必須だと考えています。 ...
EUC符号化の体系 成瀬2006/06/06 21:13:58ポイント3pt
EUCという文字コードでは、以下のような体系になっていまして、 %94%B3 というコードが来ることは、正常なEUCの文字列ならありえません。 機種依存文字でも、この範囲に収まるようになってます。(具体的にはADxx, F9xx~FCxx) ...
なるほど swd2000gt2006/06/06 21:41:39
参考になります。 URLエンコードする際、既にデータが壊れていたのでしょう。 抽出する際に破損データを区別できる処理を入れられると良いのですが、難しいですよね?
破損チェック 成瀬2006/06/06 22:28:43ポイント2pt
いろいろ方法はあるでしょうが、 先のEUCの文字のパターンを見て、それを正規表現にする。そして、その正規表現がマッチするものだけを拾う、などとすれば壊れていないものだけを拾えますね。 Perlのになりますが、参 ...
ありがとうございます swd2000gt2006/06/06 23:50:51
どうもです。なんとか目処が立ちそうな気がしてきました。 まずは破損データチェックの実装をがんばってみます。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません