Php 如何真正确定空字符串?

Php 如何真正确定空字符串?,php,string,Php,String,我试图阻止用户输入空用户名。 要确定空间,我使用以下代码: if (strlen($nickname) > 0 && strlen(trim($nickname)) == 0) { die("Your username is empty"); } 它可以工作,但当用户同时按下Alt+0160和空格时,上述条件不起作用,因此我如何确定用户名是否只包含空格和Alt+0160或任何其他导致空字符的字符?您只需先过滤字符串即可 $string = filter_var($stri

我试图阻止用户输入空用户名。 要确定空间,我使用以下代码:

if (strlen($nickname) > 0 && strlen(trim($nickname)) == 0)
{
die("Your username is empty");
}

它可以工作,但当用户同时按下Alt+0160和空格时,上述条件不起作用,因此我如何确定用户名是否只包含空格和Alt+0160或任何其他导致空字符的字符?

您只需先过滤字符串即可

$string = filter_var($string,FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH );
试着这样做:

$nickname = preg_replace("/[^A-Za-z0-9]/","",$str); //only things from the alfabet + numbers
if( strlen( $nickname ) < 1){
  // error
}
$nickname=preg_replace(“/[^A-Za-z0-9]/”,“,$str”)//只有来自alfabet+数字的内容
if(strlen($昵称)<1){
//错误
}

你过滤掉你不想要的东西(在本例中,只允许你想要的),然后检查字符串的长度。

我建议你使用白名单而不是黑名单。可能有数百个Unicode空白字符无法处理。如果有第二部分,则不需要if语句的第一部分。您的逻辑将与任何内容都不匹配。如果$昵称>0,它怎么可能==0?@Dave昵称只包含空格字符…有点离题,你让我赢得了“同伴压力”徽章,因为我删除了我的快速答案。很抱歉,我只关注了标题描述。我可以问一下为什么FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_LOW?
FILTER_FLAG_STRIP_LOW
STRIP具有数值127的字符。是的,但为什么要对其自身进行位ORing操作?换句话说,我们认为你一定是打错了,因为那没有意义。谢谢!但我还是不能让它工作。如果字符不在32和127之间,new$string是否应该返回空字符串?