我在搜索框中尝试echo
字符串。但到目前为止,只有 echos
字符串的第一个单词。
require 'search.php';
$searchQuery = $_GET['searchText'] ;
echo $searchQuery;//prints "this is a test"
$search = new Search();
$search->run($searchQuery);
.
.
<input name="searchText" type="text" id="searchText" size=70 value = <?php echo $searchQuery; // prints "this"?> />
答案 0 :(得分:3)
尝试添加引号:
<input name="searchText" type="text" id="searchText" size="70" value="<?php echo htmlspecialchars($searchQuery); ?>"/>
作为Esailija pointed out,使用htmlspecialchars()
正确转义是一种更好的解决方案,并确保无论搜索结果如何都能正确打印值。
答案 1 :(得分:1)
您需要在'value'属性的值周围添加引号,如下所示:
<input name="searchText" type="text" id="searchText" size=70 value="<?php echo $searchQuery; // prints "this"?>" />
否则这将呈现:
<input name="searchText" type="text" id="searchText" size=70 value = this is some sentent />
将名为“value”的属性的值定义为“this”,然后创建更多(无意义)属性“is”,“some”和“sentence”,它们没有值。行情很重要!您也应该引用您的大小变量,尽管在这种情况下它并不重要。
另请注意,不检查和/或清理GET变量会使您对HTML / Javascript注入攻击开放 - 如果我提供值word onClick='doSomething();'
作为GET变量值,我可以在客户端上执行javascript。如果这是作为网站评论部分的一部分呈现的话,我可能会向其他客户的机器注入任意的javascript。
[编辑]
您可以使用Esailija指出的htmlspecialchars
来完成此操作。有关常见Web漏洞的详细信息以及清理GET变量的原因,也许您应该查看OWASP
答案 2 :(得分:0)
这种情况正在发生,因为你周围没有引号,所以你实际输出的是
<input ... value = this is a test />
所以它将第一个标记指定为“value”属性。 试试这个:
<input ... value="<?php echo $searchQuery; ?>" />
答案 3 :(得分:0)
试试这个:
<input name="searchText" type="text" id="searchText" size="70" value="<?php echo $searchQuery; ?>" />