Gru*_*ton 0 php whitespace preg-replace
我有以下代码,它应该在去除所有空格后比较 2 个字符串,这是该函数的简化版本:
\n\nfunction not_same($type, $org_str1, $str2) {\n\n $str1 = preg_replace(\'/\\s+/\', \'\', $org_str1);\n $str2 = preg_replace(\'/\\s+/\', \'\', $str2);\n\n $tries = [];\n $tries[] = ["str1" => $str1, "str2" => $str2, "encoded1" => urlencode($str1), "encoded2" => urlencode($str2)]; \n\n if($str1 == $str2) {\n return true;\n } else {\n return false;\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我正在使用它来检查计算机上的处理器是否与我的数据库中的匹配型号相同,$org_str1我的客户说它正在运行的计算机上的处理器也是如此,并且$str2该模型应该在我的数据库中使用CPU有。
有时这些字符串具有不需要的空格,因此在比较过程中我删除了所有空格,以便比较文本本身。
\n\n现在我收到计算机回复说CPU有问题,因为没有匹配,因为有一些空白没有被删除。
\n\n在这种特定情况下,我尝试比较字符串 Client:Celeron\xc2\xae N3050与 Server: Celeron\xc2\xae N3050。\n我每次都会记录服务器上实际比较的内容,在我的客户端上它说它正在比较 Client:Celeron\xc2\xae N3050比较的内容,在我的客户端上它说它正在比较 Client:与 Server:Celeron\xc2\xaeN3050
我尝试将这个空格复制并粘贴到str_replace()函数中,但它没有解决问题。之后,我想到了用日志记录字符串urlencode(),这让我能够准确地看到这个神秘的白色字符是什么,但我仍然不知道如何解决这个问题。
后面的字符串urlencode()是Client:Celeron%C2%AE%C2%A0N3050 vs Server:Celeron%C2%AEN3050
正如您所看到的,我的客户端字符串中仍然有一个空格字符,编码为%C2%A0. 为什么 preg_replace 没有消除这个空格,如何以编程方式删除它?
\\xC2\\xA0是一个unicode不间断空格。添加u修改器添加到您的正则表达式中。
$raw = urldecode(\'Celeron%C2%AE%C2%A0N3050\');\n\nvar_dump(\n preg_replace(\'/\\s+/\', \'\', $raw),\n preg_replace(\'/\\s+/u\', \'\', $raw),\n urlencode($raw),\n urlencode(preg_replace(\'/\\s+/u\', \'\', $raw))\n);\nRun Code Online (Sandbox Code Playgroud)\n输出:
\nstring(16) "Celeron\xc2\xae N3050"\nstring(14) "Celeron\xc2\xaeN3050"\nstring(24) "Celeron%C2%AE%C2%A0N3050"\nstring(18) "Celeron%C2%AEN3050"\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1049 次 |
| 最近记录: |