2010-01-21 79 views
42

在做在PHP这份工作,人们可以遇到这种问题:通过PHP设置html属性的最佳实践是什么?

<span title="<?php echo $variable;?>">... 

的问题是,如果$variable包含双引号,应将其更改为\"

而这还不是故事的全部尚未:

<span title='<?php echo $variable;?>'>... 

在这种情况下,我们需要改变单引号\',但保留双引号的。

那么我们该如何以一般财产的方式来做到这一点?

回答

63

你总是希望HTML编码里面的东西HTML属性,您可以用htmlspecialchars做到:

<span title="<?php echo htmlspecialchars($variable); ?>"> 

你可能想第二个参数($quote_style)设置为ENT_QUOTES

唯一的潜在风险是$variable可能已经被编码的,所以你可以希望的最后一个参数($double_encode)设置为false

+2

证实这里HTML5规范: http://stackoverflow.com/questions/5320177/what-values-can-i-put-in-an-html-attribute-value – 2014-01-31 23:46:25

+0

+1提到“ENT_QUOTES”。我已经在使用这个函数,但双引号会弄乱html。 – danielson317 2017-08-17 16:55:13

3

那么,在将任何文本输出为HTML之前,您应该使用htmlspecialchars()将其转义。所以只要确保(双)报价是正确更改。

注意该函数的第二个参数。

0

为了解决您的编辑[编辑:已取出与此同时]:当您将动态的JavaScript到你的网站,你应该一清二楚,它会是什么样子。否则你会为XSS攻击广泛开门。这并不意味着您必须知道每个引号,但您应该足够了解如何将其嵌入到最终将其输出到HTML文件中的行中。

除此之外,

<a onclick="func(&apos;l&apos;)"> 

作品酷似

<a onclick="func('l')">