PHP3(SJIS)で構築されていたシステムの会員データを
PHP4(EUC)の新システムへ移行することになったのですが、
保存されている会員情報は
・一件ずつURLエンコードされている
・SJISとEUCのデータが混在している
・ハシゴ高、崎の旧字体(山+立+可)等の機種依存文字も混入
・記号のエスケープもされていない
という現状で、どこから手をつけるべきかと困惑しています。
URLエンコードからの抽出、SJISとEUCのデータの振り分けまではなんとかなりそうなのですが
崎の旧字体等はPHPで出力させる際、以降の字を巻き添えに文字化けしてしまいます。
なんとか、文字化けや破損の無い状態で出力させる方法・アイデアはありませんか?
例として、正常に出力したいURLエンコード文字列(EUC)を挙げておきます。⇒「%C8%F8%94%B3」
丁寧な回答ありがとうございます。
一口にEUCといっても色々あるようで通常の2バイトEUCでは機種依存な拡張文字を扱えないんですよね。
完全にデータを移行するには(今後のためにも)UTF8化は必須だと考えています。
「%C8%F8%94%B3」は「おざき」さんのデータですので「%94%B3」は崎の旧字体と考えられたのですが…
壊れていると考えるべきでしょうか。
EUCという文字コードでは、以下のような体系になっていまして、
%94%B3 というコードが来ることは、正常なEUCの文字列ならありえません。
機種依存文字でも、この範囲に収まるようになってます。(具体的にはADxx, F9xx~FCxx)
制御コード
0x00~0x1F、0x7F
ASCII文字
0x20~0x7E
漢字
0xA1A1~0xFEFE (第1バイト・第2バイトとも0xA1~0xFE)
半角カタカナ
0x8EA1~0x8EDF
補助漢字
0x8FA1A1~0x8FFEFE (第2バイト・第3バイトとも0xA1~0xFE)
http://euc.jp/i18n/charcode.ja.html
よって、壊れたデータでしょう。
ちなみに、壊れていなければ、%F9%F5 か %8F%F4%BD になったはずです。
結論からいえば、難しいとおもいます。
そもそも前提として、PHPで変換可能な、機種依存文字を含むEUC (eucJP-win) と、IEの機種依存文字を含むEUC (CP51932) が異なっています。また、CP51932 は Windowsの機種依存文字を含むShift_JIS (CP932) のすべての文字を含んでいません。
そのため、eucJP-win の文字列は、一部の文字が
Shift_JIS (CP932) で「IBM拡張文字」に含まれる文字は、
IEでは表示できません。
http://www2d.biglobe.ne.jp/~msyk/charcode/cp932/Windows-31J-char...
可能ならば、PHP4(EUC)でなく、UTF-8にするのが正解だとおもいます。不可能ならば「文字化けはしても一応は格納はされているはずなのでそれで大丈夫」ということになります。
ところで、「%94%B3」って壊れてません?