[PHP-users 21758]preg_replaceで文字化け

キャスターマイルド caster_mild_49401219 @ hotmail.com
2004年 5月 21日 (金) 12:38:54 JST


お世話になっております。
キャスターマイルドと申します。

郵政公社からダウンロードした郵便番号データを
自分の使いやすいように変換するプログラムを作成しています。

たとえば、住所のデータに
宮城県刈田郡蔵王町円田(釜沢、善舞森、土浮谷地、
とあった場合、"("を含む以下の文字列を削除したいので、
csvファイルを読み込んで、該当レコードの書き換えを行っています。

しかし、preg_replaceで置換した場合、
とある文字列だけ化けてしまうことがあるようです。

原因の箇所のサンプルプログラムを載せます。
------------------------------------------------------------
<?php
header("Content-type: text/html;charset=EUC-JP");
$test_data0 = "宮城県刈田郡蔵王町円田(釜沢、善舞森、土浮谷地、";
echo preg_replace("/(.*/",null,$test_data0)."<br>\n";
$test_data1 = "宮城県岩沼市押分";
echo preg_replace("/(.*/",null,$test_data1)."<br>\n";
?>
------------------------------------------------------------


この実行結果は、
------------------------------------------------------------
宮城県刈田郡蔵王町円田
宮城県岩沼市・br>
------------------------------------------------------------
です。


やはり、押分が原因で化けてしまいます。
これを"押"だけとか"分"だけにすると正常に動くのですが、
"押分"とくっつけると置換がうまくいかないようです。

また、"押分"だけでなく、他にも引っかかる文字があるみたいです。
(総データ12万件に対し、
 実行結果で1,000件ほどデータが減っているので。。。)

環境は、
Redhat7.3+PHP4.1.2
ソースなどの日本語は、EUC-JPです。
マルチバイト関係は、
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.detect_order = auto
mbstring.substitute_character = none;
と設定されています。

どなたか、解決策をご伝授願います。
よろしくお願い申し上げます。



**********************************
*
* キャスターマイルド
* caster_mild_49401219 @ hotmail.com
*
**********************************


PHP-users メーリングリストの案内