【问题标题】:Print special characters via php inside a html element's attribute通过 php 在 html 元素的属性中打印特殊字符
【发布时间】:2015-08-20 12:13:24
【问题描述】:

假设$string = AX èdfdfdèsèdsè'/\"(实际上,$string 是从 DB 分配的这个值)

所以当我打印以下内容时,

echo "<option value='". htmlspecialchars($string) ."'>".$string."</option>";

我得到了输出,

<option \&quot;'="" value="AX èdfdfdèsèdsè">AX èdfdfdèsèdsè'/\"</option>

我怎样才能正确地逃避这个,这样我就不会创建另一个无用的属性,而是获得与$string 中相同的值?

另外,Php 没有整体逃逸$string 的原因是什么?

【问题讨论】:

  • 无法重现。输出如预期:&lt;option value='AX èdfdfdèsèdsè'/\&amp;quot;'&gt;AX èdfdfdèsèdsè'/\"&lt;/option&gt;
  • PHP 本身不会破坏初始属性= 语法。也许查看原始源代码,而不是通过开发人员工具等。还可以使用ENT_QUOTES 转义单引号,如果您打算转义重音字母,请使用htmlentities()。并确保正确的字符集。

标签: php html escaping


【解决方案1】:

另一个答案是使用htmlspecialchars($value,ENT_QUOTES) 所以基本上就是这样

echo "<option value='". htmlspecialchars($value,ENT_QUOTES)."'>".($value)."</option>";

似乎htmlspecialchars($value)htmlentities($value) 在默认情况下都不会转换单引号',除非明确设置ENT_QUOTES 标志。

【讨论】:

  • 最后一句是对的,the manual 是这么说的……
【解决方案2】:

您应该在第二次使用 $string 时使用 htmlspecialchars,以防止用“

echo "<option value='".str_replace("'","&#039;",$string)."'>".htmlspecialchars($string)."</option>";

输出是:

<option value='AX èdfdfdèsèdsè&#039;/\"'>AX èdfdfdèsèdsè'/\&quot;</option>

【讨论】:

  • 第二次使用htmlspecialchars() 无关紧要。由于单引号,它实际上在第一个中中断
  • 当然。但这是一个建议,因为您将从数据库中获得其他字符串 - 然后它可能很重要......
【解决方案3】:
echo '<option value="', htmlspecialchars($string), '">', htmlspecialchars($string), '</option>';

除非你告诉它,否则 PHP 不会逃避任何东西。 ;)

【讨论】:

    猜你喜欢
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2014-07-27
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    相关资源
    最近更新 更多