preg_match_all 的中文乱码问题


$saddress = str_replace($filter,"",$string['8']);
preg_match_all ("/(.*)小区|(.*)学院|(.*)大厦|(.*)镇|(.*)乡|(.*)村|(.*)交叉口|(.*)交汇处|(.*)街|(.*)路/",
  $saddress,
  $out, PREG_PATTERN_ORDER);
  $saddress = $out['0']['0'];

$string['8'] 是一个中文地址 例如 四川省 成都市XX街道XX小区X号某楼

$saddress 是处理过的地址 
使用中发现大部分都是正确的 但是一些地址处理的时候 saddress会是乱码,请教如何解决 
应该是preg_match_all中文处理的一个小BUG

作者: feixuehenshui   发布时间: 2011-06-01

用iconv函数将$string['8']转成你现在的编码格式试试

作者: gosenz   发布时间: 2011-06-01

应该不是编码的问题

作者: feixuehenshui   发布时间: 2011-06-01

在正则匹配之前先echo输出$saddress和$string['8']看看乱码吗

作者: sibang   发布时间: 2011-06-01

引用 3 楼 sibang 的回复:
在正则匹配之前先echo输出$saddress和$string['8']看看乱码吗

不乱码

作者: feixuehenshui   发布时间: 2011-06-01

把中文改成英文试试,如果改成英文不乱码就改编码试试。

作者: yuweiqing120   发布时间: 2011-06-01

如果你使用的是 gbk 编码,这种情况是可能发生的
产生乱码的位置是 $saddress = str_replace($filter,"",$string['8']);
而不是 preg_match_all ("/(.*)小区|(.*)....

作者: xuzuning   发布时间: 2011-06-01

引用 6 楼 xuzuning 的回复:

如果你使用的是 gbk 编码,这种情况是可能发生的
产生乱码的位置是 $saddress = str_replace($filter,"",$string['8']);
而不是 preg_match_all ("/(.*)小区|(.*)....

哦,对,他把一个汉字拆成了两部分

作者: sibang   发布时间: 2011-06-01

引用 6 楼 xuzuning 的回复:
如果你使用的是 gbk 编码,这种情况是可能发生的
产生乱码的位置是 $saddress = str_replace($filter,"",$string['8']);
而不是 preg_match_all ("/(.*)小区|(.*)....


唠叨老大好久不见 问个好 你还在CSDN啊 ,我原来经常上CSDN的时候是2004年 当时天天见你
ADDRESS确实是GBK编码 只有2个字段是GBK编码 其他数据库里都是2312 应为地址是从EXCEL导入的 地址是从别的地方过来的 你说的有道理 那这种怎么解决呢?

作者: feixuehenshui   发布时间: 2011-06-01

引用 8 楼 feixuehenshui 的回复:

引用 6 楼 xuzuning 的回复:
如果你使用的是 gbk 编码,这种情况是可能发生的
产生乱码的位置是 $saddress = str_replace($filter,"",$string['8']);
而不是 preg_match_all ("/(.*)小区|(.*)....


唠叨老大好久不见 问个好 你还在CSDN啊 ,我原来经常上CSDN的时候是2004年 当时天天……

更换编码,你试试utf-8

作者: sibang   发布时间: 2011-06-01

$string['8']

 ||
 \/

php的mb_substr

或者

preg_replace [pattern = "/^.{7}(.).*$/us", replacement = "$1"]

作者: rcom10002   发布时间: 2011-06-01