我目前正在编写一些搜索引擎,此页面正在从上一页检索一些_GET变量。这是按预期工作的。
现在我将这些变量用作POST表单中的默认值。但是,出于某种原因,只显示了每个单词的第一个单词。表单代码如下:
<form action = "insert.php" method = 'POST'>
<Place name <input type="text" name="name" size = "30" value= <?php echo $_GET['name']; ?> />
请注意,当在页面的任何其他地方回显$ _GET [&#39; name&#39;]时,一切都很好。多个单词按预期显示,但当我将其用作文本框默认值时,只有第一个单词出现在文本框中。
起初,我认为这与在URL中发送$ _GET变量的方式有关,所以我尝试了这个:
$fullname = array();
$fullname = explode("%20", $_GET['name']);
$aaa = implode (' ',$fullname);
...
Place name <input type="text" name="name" size = "30" value= <?php echo $aaa; ?> />
但结果仍然相同。如果我在页面的任何其他位置回显它,我会得到完整的字符串,但如果它在表单中只显示第一个单词。
我在这里缺少什么?
答案 0 :(得分:4)
输入标记的value
属性需要在引号中:
<input type="text" name="name" size = "30" value="<?php echo $_GET['name']; ?>" />"
否则,如果$_GET['name']
包含空格,您最终会得到:value=John Smith
。这将被理解为value=John
,其中包含无效的Smith
属性。
另外,请考虑使用htmlspecialchars清理$_GET['name']
。考虑如果$_GET['name']
为"/><script>alert(0)</script><
会发生什么。您最终会在您的网站上嵌入用户控制的代码,从而产生reflected XSS。