【问题标题】:PHP IF OR AND not workingPHP IF OR AND 不工作
【发布时间】:2016-09-07 22:16:04
【问题描述】:

我无法正确地制作 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

【问题讨论】:

  • 在这里尝试了你的代码phpfiddle.org .. 没有发现错误 .. 代码运行成功
  • 那么它与 apache/php 配置相关吗?
  • 你用的是什么版本的PHP
  • 5.2.0开始有这个功能,你用的是什么版本的php?
  • filter_var() 返回过滤后的数据,如果过滤失败,则返回 FALSE。有你的问题

标签: php if-statement


【解决方案1】:

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

\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?

问题是你也看不到它,因为它是一个特殊的“空白”,很可能是在 Ctrl+C / Ctrl+V 来自一些奇怪的 IDE 或网站。

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

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

IDE 搜索和替换也可以解决问题。

【讨论】:

  • 嗨,这引导我走上正轨,有些奇怪,文件以 UTF-8 而非 ISO-8859-1 工作,但我什至没有考虑过这一点,因为如果不是,大多数情况下这个项目的所有内容都是 ISO
  • 编码错误是更糟糕的 IMO(对于单个 BOM 字符导致巨大的 PHP 部署崩溃的回忆并不那么美好,因为在代码审查期间完全没有注意到一个愚蠢的 IDE:S)。
【解决方案2】:

您的代码在 || 之后有一个不间断的空格字符 (\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 +                           会产生不间断的空格。 (请注意,我自己在回答中使用了不间断空格来制作空格键;)


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多