7

我知道还有其他方法可以只转义单引号(例如这个答案),但在我看来应该有一种使用htmlspecialchars()的方法。

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

是否可以只转义单引号,而单独留下双引号htmlspecialchars()

4

3 回答 3

11
str_replace("'", "\\'", $string);

那里。

或者,使用ENT_QUOTES

htmlspecialchars($string, ENT_QUOTES);
于 2012-05-14T21:11:37.950 回答
11

这是您正在寻找的常量组合。

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

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

这是因为这些常量是如何定义的。php-src/ext/标准/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()创建大量双引号,因此将结果粘贴在单引号分隔的属性中并保持双引号未转义是有意义的。

于 2012-06-18T09:42:49.130 回答
1

使用 htmlspecialchars(...)

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

于 2012-05-14T21:11:14.390 回答