Php 使用htmlspecialchars()仅转义单引号(不使用双引号)

Php 使用htmlspecialchars()仅转义单引号(不使用双引号),php,escaping,htmlspecialchars,Php,Escaping,Htmlspecialchars,我知道还有其他方法可以仅转义单引号(),但在我看来,应该有一种方法可以使用 根据手册,应该是它们常数的某种组合,但根据它们的解释,我看不到 是否可以使用htmlspecialchars()仅转义单引号,而不使用双引号?使用htmlspecialchars(…) 然后在双引号上用str_替换(…) str_replace("'", "\\'", $string); 在那里 或者,使用ENT\u引号 htmlspecialchars($string, ENT_QUOTES); 下面是您要查找的常

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

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

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

使用htmlspecialchars(…)

然后在双引号上用str_替换(…)

str_replace("'", "\\'", $string);
在那里

或者,使用
ENT\u引号

htmlspecialchars($string, ENT_QUOTES);

下面是您要查找的常量的组合

$escaped_string = htmlspecialchars($string, ENT_QUOTES & ~ENT_COMPAT, $encoding);
这将转义
&'<>
,但只剩下
ENT\u引号和~ENT\u COMPAT
是位操作语言,意思是“两个引号,减去双引号”

这是因为这些常量是如何定义的

为什么要转义单引号,而不是双引号?好吧,与转义双引号,而不是单引号的原因相反:因为您有一个字符串,其中有很多
双引号,只有少数
单引号,所以您希望将其粘贴在一个
分隔的字符串中

例如:

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

为什么需要这个?这对我来说似乎是个问题。如果只是单引号,那么就用str_替换help@FritsvanCampen为什么我需要这个?我正在使用“GoogleVisualizations:Table”,它要求我通过javascript发送数据。我已经编写了一个PHP函数来根据传递给函数的数据构建这个javascript,我希望PHP函数在内部转义单引号(用于在传递给Google的javascript中标记字符串),而不是在传递给函数之前转义数据。但是,有时传递给PHP函数的数据包含HTML,我不想转义。有意义吗?如果您发送JavaScript,请使用
json\u encode
?如果目标是将其放在HTML文档中,我严重怀疑
\
是否是预期的替换字符串。如果他试图避开单引号,这将是预期的字符串。将单引号转义以将其放入
分隔属性意味着将其更改为
'(或者等效的,如果有等效的——我不确定)。你的另一个建议,
ENT_QUOTES
,也会转换双引号字符,问题要求不要使用双引号。最终答案:使用@hvd和北欧语的组合:
str_replace(“'”,“';”)
,虽然我猜我的问题在技术上正确的答案是
否,但你不能用htmlspecialchars()来逃避单引号。
。我知道这是一个古老而封闭的问题,但我在任何地方都找不到原始问题的答案,所以我决定发布一个。这应该是答案。我更喜欢我自己。
<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>'