多字$ GET变量problemin PHP

时间:2014-06-05 18:01:34

标签: php variables get explode implode

我目前正在编写一些搜索引擎,此页面正在从上一页检索一些_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; ?> />

但结果仍然相同。如果我在页面的任何其他位置回显它,我会得到完整的字符串,但如果它在表单中只显示第一个单词。

我在这里缺少什么?

1 个答案:

答案 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