通过 PHP 设置 html 属性的最佳实践是啥?

Posted

技术标签:

【中文标题】通过 PHP 设置 html 属性的最佳实践是啥?【英文标题】:What's the best practice to set html attribute via PHP?通过 PHP 设置 html 属性的最佳实践是什么? 【发布时间】:2011-01-07 18:01:21 【问题描述】:

php 中做这项工作时,可能会遇到这种问题:

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

问题是如果$variable包含双引号,应该改成\"

这还不是全部:

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

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

那么我们怎样才能以一般属性的方式来做呢?

【问题讨论】:

【参考方案1】:

Bat 工具有一个 StringTool::htmlAttributes ( $arrayOfAttributes ) 方法也可以完成这项工作。

https://github.com/lingtalfi/Bat/blob/master/StringTool.php

【讨论】:

【参考方案2】:

您总是希望在 HTML 属性中对内容进行 HTML 编码,您可以使用 htmlspecialchars

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

您可能希望将第二个参数 ($quote_style) 设置为 ENT_QUOTES

唯一的潜在风险是$variable 可能已经被编码,因此您可能想将最后一个参数($double_encode)设置为false

【讨论】:

在此处与 html5 规范确认:***.com/questions/5320177/… +1 用于提及“ENT_QUOTES”。我已经在使用这个函数,但是双引号会弄乱 html。 请注意,ENT_QUOTES 仍然会导致 html 中的 javascript 出错:link 先使用 addlashes,然后使用 htmlspecialchars 来解决这个问题。 @LeighBicknell 我认为最好使用htmlspecialchars(json_encode($variable), ENT_QUOTES)。我没有在您的特定示例中对其进行测试,但我认为它应该适用于任何类型的值。【参考方案3】:

解决您的编辑问题 [编辑: 您同时删除了]:当您将动态 JavaScript 放置到您的网站上时,您应该之前非常清楚它会做什么看起来像。否则你会为 XSS 攻击敞开大门。这并不意味着您必须知道每个引号,但您应该知道足够的知识来决定如何将它嵌入到您最终在 HTML 文件中输出它的行。

除此之外,

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

工作原理完全一样

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

【讨论】:

【参考方案4】:

好吧,在将任何文本输出到 HTML 之前,您应该使用 htmlspecialchars() 对其进行转义。所以只要确保(双)引号被正确更改。

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

【讨论】:

以上是关于通过 PHP 设置 html 属性的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在PHP中获取上传文件扩展名的最佳方法/实践是啥[重复]

通过视图模型接收 DateTime 输入的最佳实践是啥?

属性和实例变量的最佳实践

在测试期间在 Web 应用程序的页面上定位组件的最佳实践是啥?

在 CloudKit 中获取 CKReferences 的最佳实践方法是啥?

当前在 PHP 中防止电子邮件注入攻击的最佳实践是啥?