【问题标题】: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;?>'>...

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

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

【问题讨论】:

    标签: php html


    【解决方案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 规范确认:stackoverflow.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() 对其进行转义。所以只要确保(双)引号被正确更改。

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

        【讨论】:

          猜你喜欢
          • 2010-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-13
          • 1970-01-01
          • 2010-09-08
          • 1970-01-01
          相关资源
          最近更新 更多