当我使用PHP设置HTML表单输入元素的值时,只要数据中没有空格,它就可以正常工作。
<input type="text" name="username" <?php echo (isset($_POST['username'])) ? "value = ".$_POST["username"] : "value = \"\""; ?> />
如果我输入“ Jonathan”作为用户名,则按预期将其返回给我。但是,如果输入“ Big Ted”,则在提交表单时只会重复返回“ Big”。
注意该$_POST["Username"]变量是正确的。当我使用PHP回显它时,它设置为“ Big Ted”。
$_POST["Username"]
引用它。否则,空格将变成属性分隔符,空格之后的所有内容都将被视为元素属性。右键单击Web浏览器中的页面并查看源代码。它不应看起来像这样(另请参见语法突出显示颜色):
<input value=Big Ted>
而是这个
<input value="Big Ted">
更不用说当有人用引号引起来时,这仍然会中断(因此您的代码对XSS 攻击很敏感)。使用htmlspecialchars()。
htmlspecialchars()
Kickoff example:
<input value="<?php echo (isset($_POST['username']) ? htmlspecialchars($_POST['username']) : ''); ?>">