PHP strlen(str)无效

时间:2012-06-30 16:53:35

标签: php html forms strlen

我的网站上有一个表单,它从文本区域获取输入,如果它是空的(strlen = 0),则单向处理它,如果它有文本则处理另一个表单。 以下是表格的一部分:

<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()函数以使我的表单更安全吗?

1 个答案:

答案 0 :(得分:4)

您没有从safeString返回任何

除此之外,safeString所做的事情是多余的(htmlentitieshtmlspecialchars的超集,而后者则负责防范XSS。

最后,在接受输入时,你应该进行这种清理,但只有在你产生输出时才这样做。

总而言之,您的代码应该更像

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

您还应明确指定输入的编码(请参阅htmlspecialchars的第三个参数)。