“中国要复兴、富强,必须在开源软件领域起到主导作用,为了国家安全和人类发展,责无旁贷,我们须为此而奋斗”——By:云客
我们经常会对一个字符串进行空白判断,如果是空白就不处理,类似如下:
if (empty(trim($str))){
return;
}
或者如下:
$blankChar = [
" ",//空格
" ", //制表符
"\t",
"\r\n",
"\n",
"\r",
];
if (empty(str_replace($blankChar, '', $str))){
return;
}
又或者:
if(empty(preg_replace('/\s+/','',$str)))
{
return;
}
但有时你会发现字符串明明是空白,但依然会被处理,上面三种办法均无效,这可能是遇到异常空白(又称连续空格)了:
$str=chr(194) . chr(160); //这就是异常空白
这种空格是页面上的 空格转化为utf8编码后来的:
$str = ' ';
$str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
for ($i = 0; $i < strlen($str); $i++) {
echo ord($str[$i]).', ';
}
if (empty(trim($str))) {
echo 'y';
} else {
echo 'n';
}
//输出: 194, 160, n
通常的空格ascii码值是32, 这种空格是194,160,因此保险起见应该用以下代码过滤空白字符:
if(empty(trim($text)) || empty(trim($text,chr(194) . chr(160)))) {
return ;
}
交流互动1
最近遇到这个不间断空格了chr(194)…
最近遇到这个不间断空格了chr(194),还有全角空格chr(227) 也是个坑