2015-09-07 55 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