jon*_*avo 1 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']; ?> />
Run Code Online (Sandbox Code Playgroud)
请注意,在页面中的任何其他位置回显 $_GET['name'] 时,一切都很好。多个单词按预期显示,但是当我将其用作文本框默认值时,文本框中仅显示第一个单词。
起初,我认为这与在 URL 中发送这些 $_GET 变量的方式有关,所以我尝试了这个:
$fullname = array();
$fullname = explode("%20", $_GET['name']);
$aaa = implode (' ',$fullname);
Run Code Online (Sandbox Code Playgroud)
...
Place name <input type="text" name="name" size = "30" value= <?php echo $aaa; ?> />
Run Code Online (Sandbox Code Playgroud)
但结果还是一样。如果我在页面的任何其他地方回显它,我会得到完整的字符串,但如果它在表单内,则只显示第一个单词。
我在这里缺少什么?
value输入标签的属性需要用引号引起来:
<input type="text" name="name" size = "30" value="<?php echo $_GET['name']; ?>" />"
Run Code Online (Sandbox Code Playgroud)
否则,如果$_GET['name']包含空格,您最终会得到类似的内容:value=John Smith。这将被理解为value=John带有Smith浮动的无效属性。
另外,请考虑$_GET['name']使用htmlspecialchars 进行消毒。考虑如果$_GET['name']是会发生什么"/><script>alert(0)</script><。您最终会在您的网站上嵌入用户控制的代码,从而导致反射 XSS。