检测字符串是否完整的问题 字符串处理的时候有时候会碰到截取不完整,怎么判断一个字符串是否是完整的(没有乱码)? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不要告诉我用mb_substr 是用正则处理过的 不是简单的截取 通常会出现在gbk的页面中,utf-8的页面目前我还没有发现截取不完整的。。因为gbk很恶心的有写字符是有问题的 strlen 输入 15 因为这段字符全是中文 所以是因为截取不完整 现在我要的是怎么判断截取后是否完整,因为里面有可能还有数字或者单个英文字母 原始数据:中华北路俏唯衣服装店处理:preg_match_all ("/(.*)小区|(.*)学院|(.*)大厦|(.*)镇|(.*)乡|(.*)村|(.*)交叉口|(.*)交汇处|(.*)街|(.*)路/", $saddress, $out, PREG_PATTERN_ORDER); preg_match_all ("|((([\xb0-\xf7][\xa1-\xfe])|([\x81-\xa0][\x40-\xfe])|([\xaa-\xfe][\x40-\xa0])|(\w))+)(小区|学院|大厦|镇|乡|村|交叉口|交汇处|街|路)iU", $saddress, $out, PREG_PATTERN_ORDER);没有测试,你的正则问题在于.*匹配了任意字符,所以可能会导致中文不全的情况看看我写的,不对你自己该把,思路就是这样了,只匹配完整的中文字符 这是因为你使用的是 gbk 编码的数据路 的内码 c2b7衣服 的内码 d2c2b7fe请注意红色的部分,“衣”内码的第二个字节与“服”内码的第一个字节恰好组成“路”如果使用 utf8 编码的数据,就不会这样了$saddress = '中华北路俏唯衣服装店';$p = "/(.*)小区|(.*)学院|(.*)大厦|(.*)镇|(.*)乡|(.*)村|(.*)交叉口|(.*)交汇处|(.*)街|(.*)路/u";$saddress = iconv('gbk', 'utf-8', $saddress);$p = iconv('gbk', 'utf-8', $p);preg_match_all ($p, $saddress, $out, PREG_PATTERN_ORDER);echo iconv('utf-8', 'gbk', print_r($out, 1));Array( [0] => Array ( [0] => 中华北路 ) [1] => Array ( [0] => ) [2] => Array ( [0] => ) [3] => Array ( [0] => ) [4] => Array ( [0] => ) [5] => Array ( [0] => ) [6] => Array ( [0] => ) [7] => Array ( [0] => ) [8] => Array ( [0] => ) [9] => Array ( [0] => ) [10] => Array ( [0] => 中华北 )) preg_match_all("/((([\xb0-\xf7][\xa1-\xfe])|([\x81-\xa0][\x40-\xfe])|([\xaa-\xfe][\x40-\xa0])|(\w))+(小区|学院|大厦|镇|乡|村|交叉口|交汇处|街|路))/",$str,$out, PREG_PATTERN_ORDER);Array( [0] => Array ( [0] => 中华北路 ) [1] => Array ( [0] => 中华北路 ) [2] => Array ( [0] => 北 ) [3] => Array ( [0] => 北 ) [4] => Array ( [0] => ) [5] => Array ( [0] => ) [6] => Array ( [0] => ) [7] => Array ( [0] => 路 )) 谁能用curl或file_get_contents获取这个网页的内容? 关于php获取windows的磁盘信息 配置问题 将PHP网站从linux移植到windows下需要怎么做? 今天超级郁闷 session的问题 大家在用php+mysql做blog的时候,是怎样生成rss(xml文件)的啊? PHP中关于打印的问题! 在javascript中如何调用php中得到的变量 当前在线人数不真 正则求助…… 大家帮忙看看进来,在线等
因为gbk很恶心的有写字符是有问题的
处理:preg_match_all ("/(.*)小区|(.*)学院|(.*)大厦|(.*)镇|(.*)乡|(.*)村|(.*)交叉口|(.*)交汇处|(.*)街|(.*)路/",
$saddress,
$out, PREG_PATTERN_ORDER);
$saddress,
$out, PREG_PATTERN_ORDER);
没有测试,你的正则问题在于.*匹配了任意字符,所以可能会导致中文不全的情况
看看我写的,不对你自己该把,思路就是这样了,只匹配完整的中文字符
路 的内码 c2b7
衣服 的内码 d2c2b7fe请注意红色的部分,“衣”内码的第二个字节与“服”内码的第一个字节恰好组成“路”如果使用 utf8 编码的数据,就不会这样了$saddress = '中华北路俏唯衣服装店';
$p = "/(.*)小区|(.*)学院|(.*)大厦|(.*)镇|(.*)乡|(.*)村|(.*)交叉口|(.*)交汇处|(.*)街|(.*)路/u";
$saddress = iconv('gbk', 'utf-8', $saddress);
$p = iconv('gbk', 'utf-8', $p);preg_match_all ($p,
$saddress,
$out, PREG_PATTERN_ORDER);echo iconv('utf-8', 'gbk', print_r($out, 1));Array
(
[0] => Array
(
[0] => 中华北路
) [1] => Array
(
[0] =>
) [2] => Array
(
[0] =>
) [3] => Array
(
[0] =>
) [4] => Array
(
[0] =>
) [5] => Array
(
[0] =>
) [6] => Array
(
[0] =>
) [7] => Array
(
[0] =>
) [8] => Array
(
[0] =>
) [9] => Array
(
[0] =>
) [10] => Array
(
[0] => 中华北
))
Array
(
[0] => Array
(
[0] => 中华北路
) [1] => Array
(
[0] => 中华北路
) [2] => Array
(
[0] => 北
) [3] => Array
(
[0] => 北
) [4] => Array
(
[0] =>
) [5] => Array
(
[0] =>
) [6] => Array
(
[0] =>
) [7] => Array
(
[0] => 路
))