2015-09-07 25 views
0

我有一个函数在插入数据库之前检查用户输入。它是这样的:空格字符在PHP中的字符串?

function fix ($data) { 
    if ((strlen($data) == 0) || (empty($data)) || ($data == "")) { 
     echo "Please try again"; 
     die(); 
    } else { 
     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data); 
    } 
    return $data; 
} 

为什么如果用户输入空格字符这个函数返回true?

+1

由于空格字符__is字符__....'strlen的(”“)'较大比0(它的长度为1); 'empty(“”)'是假的,它不是空的,它包含一个空格;和'“”!==“”',它们不一样 –

+0

通常的惯用方式是:if(0 === strlen(trim($ data))){die('Please try again'); } else {...}' – bishop

回答

0

它与PHP做并false Y值

$x = ''; // empty string is false 

VS

$x = ' '; 

的空间是一个字符,这意味着该字符串不为空,因此没有虚假。你可以用

trim($x); // removes the space so we have an empty string 
2

" "是不一样的一个空字符串串解决这个问题。它的长度为4(4个空格)。它也与空字符串""不同,因为它有4个字符。如果你想检查一个字符串为空或只有空白,试试这个:

(见文档:http://us.php.net/manual/en/function.ctype-space.php

if (strlen($data) == 0 || ctype_space($data)) { 
    //this is empty or all whitespace 
} 

祝你好运!

+0

strlen(trim($ data))? – hanshenrik

0

在你所有的三张支票中,一个空格都会通过。

$string = ' '; 
strlen($string) // == 1 
empty($string) // == false 
$string == '' // == false 

你应该做它trim你串支票之前,因为这将删除多余的空白

trim($string); 
if (strlen($data) == 0 || empty($data) || $data == "") { 
+0

'trim($ string)'实际上不会修改字符串。试试'$ data = trim($ data)'。这实际上修改数据有明显的缺点,这可能或不可能是需要的。 – CollinD