【问题标题】:Escape only single quotes (leave double quotes alone) with htmlspecialchars()使用 htmlspecialchars() 只转义单引号(不理会双引号)
【发布时间】:2012-05-14 21:03:39
【问题描述】:

我知道还有其他方法可以只转义单引号 (such as this answer),但在我看来应该有一种方法可以使用 htmlspecialchars()

根据手册,应该是它们常量的某种组合,但根据他们的解释,我看不到。

是否可以使用htmlspecialchars() 只转义单引号,而不用双引号?

【问题讨论】:

  • 为什么需要这个?这对我来说似乎是个问题。
  • 如果只是单引号,那么使用str_replace
  • This 可能会有所帮助
  • @FritsvanCampen 为什么我需要这个?我正在使用“Google Visualizations: Table”,它要求我通过 javascript 发送数据。我编写了一个 PHP 函数来从传递给函数的数据构建这个 javascript,我宁愿让 PHP 函数在内部转义单引号(用于在传递给 Google 的 javascript 中标记字符串),而不是让在将数据传递给函数之前对其进行转义。但是,有时传递给 PHP 函数的数据包含 HTML,我不想转义。有意义吗?
  • 如果您要发送 JavaScript,请使用 json_encode?

标签: php escaping htmlspecialchars


【解决方案1】:
str_replace("'", "\\'", $string);

那里。

或者,使用ENT_QUOTES

htmlspecialchars($string, ENT_QUOTES);

【讨论】:

  • 我严重怀疑 \' 是否是预期的替换字符串,如果目标是将其放入 HTML 文档中。
  • 如果他试图转义单引号,那将是预期的字符串。
  • 转义单引号以将其放在'-delimited 属性中意味着将它们更改为'(或等效项,如果有等效项-我不确定)。您的另一个建议 ENT_QUOTES 也转换了双引号字符,问题要求不要理会。​​span>
  • 最终答案:使用了@hvd 和挪威语的组合:str_replace("'", "'");,尽管我猜我的问题在技术上正确的答案是no, you cannot escape only single quotes with htmlspecialchars()
【解决方案2】:

这是您要查找的常量组合。

$escaped_string = htmlspecialchars($string, ENT_QUOTES & ~ENT_COMPAT, $encoding);

这将逃脱& ' < >,但留下"ENT_QUOTES & ~ENT_COMPAT 是位操作语言,意思是“双引号,减去双引号”。

这是因为这些常量是如何定义的。 php-src/ext/standard/html.h

#define ENT_HTML_QUOTE_NONE         0
#define ENT_HTML_QUOTE_SINGLE       1
#define ENT_HTML_QUOTE_DOUBLE       2

#define ENT_COMPAT      ENT_HTML_QUOTE_DOUBLE
#define ENT_QUOTES      (ENT_HTML_QUOTE_DOUBLE | ENT_HTML_QUOTE_SINGLE)
#define ENT_NOQUOTES    ENT_HTML_QUOTE_NONE

为什么你想转义单引号而不是双引号?好吧,与您转义双引号而不是单引号的原因相反:因为您有一个包含很多 " 双引号而只有几个 ' 单引号的字符串,所以您想将其粘贴在'-delimited 字符串中。

一个例子:

<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>'

json_encode() 会创建大量双引号,因此将结果粘贴在单引号分隔的属性中并保持双引号不转义是有意义的。

【讨论】:

  • 我知道这是一个古老且封闭的问题,但我无法在任何地方找到原始问题的答案,所以我决定发布一个。
  • 这应该是答案。我更喜欢ENT_HTML5 | ENT_QUOTES &amp; ~ENT_COMPAT我自己。
【解决方案3】:

使用 htmlspecialchars(...)

然后在双引号上加上 str_replace(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 2011-06-13
    • 2013-06-30
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 2017-01-08
    相关资源
    最近更新 更多