0

我正在尝试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"?> />
4

4 回答 4

3

尝试添加引号:

<input name="searchText" type="text" id="searchText" size="70" value="<?php echo htmlspecialchars($searchQuery); ?>"/>

正如Esailija 指出的那样,正确转义 withhtmlspecialchars()是一个更好的解决方案,并且将确保无论搜索是什么,它都能正确打印值。

于 2012-07-30T20:37:47.107 回答
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”,它们没有值。报价很重要!您可能还应该引用您的 size 变量,尽管在这种情况下它并不重要。

另请注意,不检查和/或清理 GET 变量会使您面临 HTML/Javascript 注入攻击——如果我提供该值word onClick='doSomething();'作为 GET 变量值,我可以在客户端上执行 javascript。如果这被呈现为网站评论部分的一部分,我可能会向其他客户端的机器注入任意 javascript。

[编辑]

您可以通过使用htmlspecialcharsEsailija 指出的方法来完成此操作。有关常见 Web 漏洞和清理 GET 变量的原因的更多信息,也许您应该查看OWASP

于 2012-07-30T20:36:52.800 回答
0

发生这种情况是因为您周围没有引号,所以您实际输出的是

<input ... value = this is a test />

所以它将第一个标记分配为“值”属性。尝试这个:

<input ... value="<?php echo $searchQuery; ?>" />
于 2012-07-30T20:35:52.840 回答
0

尝试这个:

<input name="searchText" type="text" id="searchText" size="70" value="<?php echo $searchQuery; ?>" />
于 2012-07-30T20:36:36.590 回答