2012-07-15 88 views
2

我有一個輸入框,與PHP會回顯輸入的名稱。問題是,當用戶按空間時會回顯空白字符。我搜查了並沒有找到絕對的答案。我知道使用!empty如果在輸入字段中存在絕對的空間,但是如果有一個空格應該是空的。PHP:空/空,如果邏輯查詢

如何避免在輸入中存在空格時出現回顯?

if (!empty($name['name']) || null) { 
    echo 'Your name is '.$name; 

} 
{ 

//do nothing 

} 
+1

它通常建議使用['TRIM()'](http://php.net/trim)像這些 – jprofitt 2012-07-15 17:22:48

+0

投入使用的strlen()'修剪($名稱[ 'name'])' – hjpotter92 2012-07-15 17:24:15

回答

3

調用該函數empty()將是真實的,如果它沒有設置,空,空字符串,布爾假,或0.仍然我喜歡在條件中避免沉重的邏輯...在測試之前拉出修剪並準備字符串。

$nameString = empty($name['name'])?null:trim($name['name']); 
if(!empty($nameString){ 
    //go to town here 
} 

爲了提前安撫狂熱分子,我還要補充一點,在打印之前,您應該避開任何用戶輸入。這樣你可以防止XSS。爲了更安全的附加試試這個:

$nameString = empty($name['name'])?null:trim($name['name']); 
$nameString = htmlentities($nameString, ENT_QUOTES); 
if(!empty($nameString){ 
    //go to town here 
} 

然而,一個側面說明...的htmlentities()調用並不能防止SQL注入,因此,如果該數據進入一個數據庫,你就必須做更多的工作 - - 因爲你的問題並不表明你正在做其他任何事情而不是打印出來,我們可以暫時擱置SQL注入討論。

+0

非常好解釋!我有困難纏繞空,空,修剪等,但現在更清晰。但是,我會將它們存儲在數據庫中,並會考慮避免sql注入。 – CodingWonders90 2012-07-15 17:57:52

+1

@cholomanCoding只是不直接在數據庫中存儲你的htmlentity轉義字符串...從原始創建第二個字符串保護和存儲,否則你會在你的數據庫列中得到一堆垃圾...... – Ray 2012-07-15 18:02:01

0

你要檢查是否有空間,你可能會想這樣做:

if ($name['name'] != null && trim($name['name']) != "" && !strpos(trim($name['name']), " ")) 
{ 
    // work with $name['name'] 
} 
else 
{ 
    // nothing 
} 
0

使用empty()時要小心,如果用戶輸入'0',它將返回TRUE。

您可能需要使用