这是我的源代码:
<html>
<body>
<?php
$query = $_REQUEST["search"];
Print "<iframe src="http://www.en.wikipedia.org/wiki/$query"></iframe>';
?>
</body>
</html>
我想把它放在用户输入术语的地方,然后自动将它们带到查询的维基百科页面。我当然知道我在这里做错了什么,但我无法弄清楚是什么。谢谢你的帮助!
答案 0 :(得分:5)
将您的陈述更改为:
print "<iframe src=\"http://www.en.wikipedia.org/wiki/$query\"></iframe>";
你需要逃避引号。
答案 1 :(得分:3)
使用htmlspecialchars()
将任何变量输出到HTML文本内容或属性值的方式相同。如果每次将用户数据删除到HTML时都不这样做,那么就会出现导致跨站点脚本(XSS)攻击的HTML注入漏洞。
在您的情况下,您要将变量插入到网址组件中,因此在进行HTML编码之前,您需要使用rawurlencode()
进行网址编码。
好的......所以,如果您正在进行网址编码,您可以实际跳过HTML编码,因为HTML特有的所有字符也会变为安全%
序列通过URL编码。
PHP是一种模板语言。使用它,不要打它。每当你从PHP块中echo
或print
插入一个字符串时,你可能会为自己带来不必要的生活。
逐字包含文字内容,不要担心字符串文字中反斜杠转义的引号字符:
<?php
$query= $_REQUEST['search'];
?>
<iframe src="http://en.wikipedia.org/wiki/<?php echo rawurlencode($query); ?>">
</iframe>
答案 2 :(得分:1)
尽量不要在print / echo语句中包含巨大的html字符串,这样可以很容易地引用引用错误,并且很难跟踪代码的运行情况。
相反,你可以在html中包含变量作为许多模板语言的标记,但是使用简写回显功能<?= $variable; ?>
<html>
<body>
<iframe src="http://www.en.wikipedia.org/wiki/<?= $_REQUEST["search"]; ?>"></iframe>
</body>
</html>