代码之家  ›  专栏  ›  技术社区  ›  GrumpyCrouton

preg\u replace没有从字符串中删除所有空白字符

  •  0
  • GrumpyCrouton  · 技术社区  · 7 年前

    我得到了下面的代码,在去掉所有空白后应该比较两个字符串,下面是函数的简化版本:

    function not_same($type, $org_str1, $str2) {
    
        $str1 = preg_replace('/\s+/', '', $org_str1);
        $str2 = preg_replace('/\s+/', '', $str2);
    
        $tries = [];
        $tries[] = ["str1" => $str1, "str2" => $str2, "encoded1" => urlencode($str1), "encoded2" => urlencode($str2)];        
    
        if($str1 == $str2) {
            return true;
        } else {
            return false;
        }
    
    }
    

    我用这个来检查计算机上的处理器是否与数据库中匹配的型号相同,所以 $org_str1 是我的客户所说的运行它的计算机 $str2 是模型应该具有的数据库中的cpu。

    现在我得到计算机回来说,CPU是错误的,因为不匹配,因为有一些空白是没有删除。

    Celeron® N3050 Celeron® N3050 . 我每次都在记录 事实上 在我的服务器上比较时,在我的客户端上,它表示它正在比较客户端: Celeron®N3050

    我试着把这个空白复制粘贴到 str_replace() 但并没有解决问题。在那之后,我想到了用 urlencode() ,这让我看到了这个神秘的白色字符到底是什么,但我仍然不知道如何解决这个问题。

    是客户: Celeron%C2%AE%C2%A0N3050 Celeron%C2%AEN3050

    如您所见,在我的客户机字符串中仍然有一个空格字符,编码为 %C2%A0 . 为什么pregèu replace没有删除这个空白,我如何通过编程删除它?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Sammitch    7 年前

    \xC2\xA0 是unicode不间断空格。添加 u modifier

    $raw = urldecode('Celeron%C2%AE%C2%A0N3050');
    
    var_dump(
        preg_replace('/\s+/', '', $raw),
        preg_replace('/\s+/u', '', $raw),
        urlencode($raw),
        urlencode(preg_replace('/\s+/u', '', $raw))
    );
    

    输出:

    string(16) "Celeron® N3050"
    string(14) "Celeron®N3050"
    string(24) "Celeron%C2%AE%C2%A0N3050"
    string(18) "Celeron%C2%AEN3050"