2012-06-30 26 views
-1

我在我的网站上有一个表单,它接受来自文本区域的输入,如果它为空(strlen = 0),则另一种方式处理它,如果它有文本。 这里是表单的一部分:PHP strlen(str)不工作

<form name='contact' action='contact.php' method='post'> 
    ... 
    Message*<br /> 
    <textarea name='msg' rows='10' cols='70' maxlength='2048'><?php echo $msg ?></textarea><br /> 
    ... 
    <input type='submit' value='Send!' id='subby' name='fatk' style='height:60px; width:300px;' /> 
</form> 

现在的PHP代码:

$msg = isset($_POST['msg'])?safeString($_POST['msg']):''; 
$msg = substr($msg,0,2048); 
if (strlen($msg) == 0) 
    echo "<h1>Test failed</h1>"; 
else { ... } 

这里的safestring(str)方法:

function safeString($str) { 
    htmlentities($str); 
    htmlspecialchars($str); 
} 

我每次提交表单,无论多少或者我在msg textarea中输入了多少,它总是说它是空的(通过回显TEST FAILED)。另外,你是否知道我应该加入到我的safestring()函数中来让我的表单更安全?

回答

4

你没有返回什么safeString

除此之外,safeString所做的是多余的(htmlentitieshtmlspecialchars的超集,而后者的工作是防范XSS)。

最后,你应该真的而不是接受输入,但只有当你正在产出的输出时,这样做是消毒。

toghether把,你的代码应该看起来更像

$msg = isset($_POST['msg']) ? $_POST['msg'] :''; 
if ($msg == '') 
    echo "<h1>Test failed</h1>"; 
else { 
    echo "Received value: ".htmlspecialchars($msg); 
} 

你也应该绝对指定输入的编码(见的htmlspecialchars第三个参数)。

+0

这是一条评论,而不是答案。 –

+0

所以我应该只使用'htmlspecialchars'? –

+1

@tereško:给男人一点时间来扩大答案,是吗? – Jon