2012-07-15 87 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。

您可能需要使用