PHP如果或不工作

时间:2016-05-12 08:02:58

标签: php if-statement

我在制作IF OR语句时遇到问题,在这种情况下,如果我使用||则无关紧要或“或”。

我现在有: if($email == '' || (!filter_var($email, FILTER_VALIDATE_EMAIL)))

我收到错误PHP Fatal error: Call to undefined function \xa0() in

如果我更改为if($email == '' || !filter_var($email, FILTER_VALIDATE_EMAIL))

我收到错误PHP Parse error: syntax error, unexpected '!' in

2 个答案:

答案 0 :(得分:6)

此错误消息Call to undefined function \xa0() in看起来很像编码类型是您问题的根源。 \xA0字符是一个bugger:

\xa0 is actually non-breaking space in Latin1 (ISO 8859-1), also
chr(160). You should replace it with a space. When .encode('utf-8'), it
will encode the unicode to utf-8, that means every unicode could be
represented by 1 to 4 bytes.Jun 12, 2012

来自Python: Removing \xa0 from string?

问题是你无法看到它,因为它是一个特殊的空白&#34;很可能是在一个奇怪的IDE或网站的 Ctrl + C / Ctrl + V 中插入的。< / p>

这应该从您的文件中删除它们并将其替换为good whitespaces

file_put_contents('your-script-cleaned.php', 
                  str_replace('\\x0a', 
                  ' ', 
                  file_get_contents('your-script-original.php')))

IDE搜索&amp;替换也可以做到这一点。

答案 1 :(得分:0)

您的代码在||后面有一个不间断的空格字符(\u00A0)。

另外PHP很愚蠢,认为该字节是一个可行的标识符,因此它认为

<nbsp>(!filter_var($email, FILTER_VALIDATE_EMAIL))

是一个函数调用,与

不同
myfunction(!filter_var($email, FILTER_VALIDATE_EMAIL))

,而

<nbsp>!filter_var($email, FILTER_VALIDATE_EMAIL)

是语法错误(因为myfunction!filter_var($email, FILTER_VALIDATE_EMAIL)),因为!不能用作二元运算符。)

在键盘布局中输入这些不间断的空格非常常见,您必须使用 Alt Gr 键入管道字符|,例如我所使用的标准芬兰布局使用。这是因为你在击中空格键时仍然按下 Alt Gr ;在许多布局 Alt Gr + 将产生一个不间断的空间。 (请注意,我自己在答案中使用了不间断的空格来制作空格键;)

一个好的编辑器可以将这样的用法标记为语法错误,或者您可以配置编辑器以突出显示这些错误。