字符串处理的时候有时候会碰到截取不完整,怎么判断一个字符串是否是完整的(没有乱码)? 

解决方案 »

  1.   

    不要告诉我用mb_substr 是用正则处理过的 不是简单的截取
      

  2.   

    通常会出现在gbk的页面中,utf-8的页面目前我还没有发现截取不完整的。。
    因为gbk很恶心的有写字符是有问题的
      

  3.   

    strlen 输入 15 因为这段字符全是中文 所以是因为截取不完整 现在我要的是怎么判断截取后是否完整,因为里面有可能还有数字或者单个英文字母
      

  4.   

    原始数据:中华北路俏唯衣服装店
    处理:preg_match_all ("/(.*)小区|(.*)学院|(.*)大厦|(.*)镇|(.*)乡|(.*)村|(.*)交叉口|(.*)交汇处|(.*)街|(.*)路/",
        $saddress,
        $out, PREG_PATTERN_ORDER);
      

  5.   

    preg_match_all ("|((([\xb0-\xf7][\xa1-\xfe])|([\x81-\xa0][\x40-\xfe])|([\xaa-\xfe][\x40-\xa0])|(\w))+)(小区|学院|大厦|镇|乡|村|交叉口|交汇处|街|路)iU",
      $saddress,
      $out, PREG_PATTERN_ORDER);
    没有测试,你的正则问题在于.*匹配了任意字符,所以可能会导致中文不全的情况
    看看我写的,不对你自己该把,思路就是这样了,只匹配完整的中文字符
      

  6.   

    这是因为你使用的是 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] => 中华北
            ))
      

  7.   

    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] => 路
            ))