如何在PHP中转义单引号?


How do I escape single quotes in PHP

我正在使用Magento尝试将错误消息样式设置为弹出窗口,而不是内联显示。

我找到了一篇解释如何做到这一点的文章,但是当我试图使用它时,代码显示一个错误。(http://azharkamar.com/5378/magento-modifying-default-message-alert-box-popup-dialog/)

这是我使用的代码:

$html .= '<a class="msgclose" href="#" onclick="document.getElementById("messages").style.visibility="hidden"">x</a>'; 

文章后面提到的一条评论说,他们"必须转义单引号才能使其工作。"

我尝试编辑代码,并使用了如下所示的代码。关闭按钮出现了,但它不会关闭该框。

$html .= '<a class="msgclose" href="#" onclick="document.getElementById("messages").style.visibility="hidden"">x</a>';

任何帮助都将非常感激,谢谢!

可以在单引号前加上反斜杠,或者对字符串使用双引号来转义:

$var = 'Escape '' like this';
$var = "Or embed ' like this";

如果您需要嵌入javascript,这可能有点困难,因为javascript字符串中的引号也需要转义。通常,您可以巧妙地将单引号和双引号组合起来:

$html .= '<a class="msgclose" href="#" onclick="document.getElementById(''messages'').style.visibility=''hidden''">x</a>';

或者你可以使用heredoc:

$html = <<<html
  <a class="msgclose" href="#" onclick="document.getElementById('messages').style.visibility='hidden'">x</a>'
html;
顺便说一下,在HTML中转义引号是另一回事。您使用&quot;实体,因此,如果您想在Javascript中使用双引号,结果将是:
$html .= '<a class="msgclose" href="#" onclick="document.getElementById(&quot;messages&quot;).style.visibility=&quot;hidden&quot;">x</a>';

可以用反斜杠转义代码中的单引号,如下所示:

$html .= '<a class="msgclose" href="#" onclick="document.getElementById(''messages'').style.visibility=''hidden''">x</a>';

或者你可以把javascript移出你的html:

$html .= '<a class="msgclose" href="#" onclick="hideMessage()">x</a>';
<script type="text/javascript">
function hideMessage() {
    document.getElementById("messages").style.visibility = "hidden";
}
</script>

都可以转义'前面加反斜杠' (' -> '')

$html .= '<a class="msgclose" href="#" onclick="document.getElementById(''messages'').style.visibility="hidden">x</a>';

或者使用EOF函数来消除转义的需要。

$html .= <<<EOF
<a class="msgclose" href="#" onclick="document.getElementById('messages').style.visibility="hidden">x</a>
EOF;

在php中使用'反斜杠转义字符。但是$html转义后的值是不整齐的我是这样做的。

$html .= "<a class='msgclose' href='#' onclick='document.getElementById('messages').style.visibility='hidden''>x</a>";

我用了双引号,里面用了单引号