php - preg_replace 没有从字符串中删除所有空白字符
问题描述
我有以下代码,它应该在去除所有空格后比较 2 个字符串,这是该函数的简化版本:
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 错误,因为没有匹配,因为有一些空白没有被删除。
在这种特定情况下,我试图比较字符串 Client: Celeron® N3050
vs Server: Celeron® N3050
。每次在我的服务器上实际比较的内容时,我都会记录,在我的客户端上它说它正在比较客户端:Celeron® N3050
与服务器:Celeron®N3050
我尝试将这个空格复制并粘贴到一个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');
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"
推荐阅读
- python - Deeplabcut 中的难度训练数据集
- javascript - 无法读取明显未定义的未定义属性 - 已解决
- spotify - Spotify SDK 身份验证未登录
- ios - tableView.reloadData() 和 DispatchQueue 无法在不同的视图控制器中重新加载 tableview
- sql - 如何在 SQL 存储过程中生成可读的名称?
- vscode-settings - CodeRunner 不在 VS 上显示 JS 输出
- perl - Perl 脚本删除换行符并将下一行数据移动到上一行
- android - 如何添加在其他应用程序中显示的功能
- javascript - 如何避免 React.js 中的这种无限更新循环?
- python - 如何根据另一个表中的数据过滤一个表