2011-05-17 102 views
1

这是我的源代码:如何在HTML <a>标记内插入PHP变量?

<html> 
<body> 
<?php 

$query = $_REQUEST["search"]; 

Print "<iframe src="http://www.en.wikipedia.org/wiki/$query"></iframe>'; 

?> 

</body> 
</html> 

我想拥有它,其中,当在一个长期的用户类型,那么它会自动将它们带给他们查询的维基百科页面。我肯定知道我在这里做错了什么,但我无法弄清楚什么。感谢您的帮助!

print "<iframe src=\"http://www.en.wikipedia.org/wiki/$query\"></iframe>"; 

你需要躲避引号:

+0

你需要修复您的报价在打印语句。 – slartibartfast 2011-05-17 22:24:52

+0

如果您遇到的错误是语法错误,那么您的引号不匹配。否则,维基百科可能会被配置为“剔除”iframe。 – 2011-05-17 22:25:55

+0

我不知道它是否不够明显,但我想提及$ query不是我要去的页面,而是来自用户搜索本身的实际查询。到目前为止给出的所有答案都使我的iframe变成了一个字面的维基百科页面,标题为“$ query”,这不是我想要的。 – Matt 2011-05-17 22:32:11

回答

3
  1. 同样的方式,使用htmlspecialchars()。如果您每次将用户数据放入HTML时都没有这样做,则会导致HTML注入漏洞,从而导致跨站点脚本攻击(XSS)漏洞。

  2. 在你的情况下,你要插入一个变量到URL组件中,所以在你进行HTML编码之前,你需要使用URL编码,使用rawurlencode()

  3. OK ...因此,如果您正在进行网址编码,您实际上可以跳过HTML编码,因为所有对HTML特殊的字符也都通过URL编码转换为安全的%序列。

  4. PHP是一种模板语言。使用它,不要战斗。无论何时你从012块内部插入字符串echoprint,你都可能使自己的生活变得不必要的艰难。

逐字包括文字内容,并在字符串中不必担心反斜杠逃逸引号字符:

<?php 
    $query= $_REQUEST['search']; 
?> 
<iframe src="http://en.wikipedia.org/wiki/<?php echo rawurlencode($query); ?>"> 
</iframe> 
+2

我删除我的答案和+1这个因为这是更好的回答关于逃脱 – 2011-05-17 22:34:52

+0

谢谢你的帮助! – Matt 2011-05-17 23:02:51

5

更改您的语句。

1

尽量不要在打印/回显语句中包含大量的html字符串,它可以很容易地引用引用错误,并且很难跟踪代码中发生的情况。

相反,你可以包含变量像许多模板语言,在HTML中的标记,但使用速记回声功能<?= $variable; ?>

<html> 
    <body> 
    <iframe src="http://www.en.wikipedia.org/wiki/<?= $_REQUEST["search"]; ?>"></iframe> 
    </body> 
</html> 
你输出任何变量转换成HTML文本内容或属性值
+2

使用'<?php echo $ _REQUEST [“search”]; '''因为你假设短标签已打开 – 2011-05-17 22:30:57

+0

+1简化 – Ascherer 2011-05-17 22:31:22

+0

它更好,如果短标签被关闭是的大声笑,但无关紧要,如果他们:) – Ascherer 2011-05-17 22:32:04