在包含单引号和双引号的字符串中转义单引号

5

我有一个包含单引号和双引号的PHP字符串,但是在正确转义它时遇到了一些困难。甚至尝试过在线的quotify网站,但它们的结果也出现错误。

$confirmation .= '<a title="Share on Facebook" target="_blank" href="javascript: void(0)" onclick="window.open('http://www.facebook.com/sharer.php?u=http%3A%2F%2Fmydomain.com%2Fquiz%2F','sharer','toolbar=0,status=0,width=548,height=325');" class="">Share on Facebook</a>';

我认为不需要转义双引号。但是,我的所有尝试都导致加载页面时出现HTTP 500错误。

这个字符串中的单引号是如何被转义的?


首先,使PHP错误显示 - FirstOne
你说得对。下面已经注释了 - 这确实是PHP。 - rwkiii
2个回答

9
为了在PHP中转义嵌套的引号,请使用\
 $confirmation .= '<a title="Share on Facebook" target="_blank" href="javascript: void(0)" onclick="window.open(\'http://www.facebook.com/sharer.php?u=http%3A%2F%2Fmydomain.com%2Fquiz%2F\',\'sharer\',\'toolbar=0,status=0,width=548,height=325\');" class="">Share on Facebook</a>';

对于引用较多的复杂情况,使用heredoc可能更易读和实用:

$confirmation .= <<<EOT
  <a title="Share on Facebook" target="_blank" href="javascript:void(0)" onclick="window.open('http://www.facebook.com/sharer.php?u=http%3A%2F%2Fmydomain.com%2Fquiz%2F','sharer','toolbar=0,status=0,width=548,height=325');" class="">Share on Facebook</a>
EOT;

1
你说得对。代码在functions.php文件中 - 我在编辑器中打开了另一个窗口,完全搞混了 - 两次都是。 :S 这是PHP。 - rwkiii
2
YAY for heredoc。完全同意,对于需要大量转义的复杂变量,heredoc语法是最好的选择。 - Duane Lortie

0

$confirmation .= '<a title="分享到 Facebook" target="_blank" href="javascript: void(0)" onclick="window.open(\'http://www.facebook.com/sharer.php?u=http%3A%2F%2Fmydomain.com%2Fquiz%2F\',\'sharer\',\'toolbar=0,status=0,width=548,height=325\');" class="">分享到 Facebook</a>';


这个帖子上的两个答案在我看来都是正确的。我尝试像你和Brandon的例子一样转义它们,但没有成功。 - rwkiii
1
你使用了3个小于号吗? - Brandon Horsley
是的,我做了:$confirmation .= <<<EOT ... 我不明白为什么我尝试手动用反斜杠转义它时会出错。 - rwkiii
2
@rwkiii - 在该行的<<<EOT之后不能有任何空格,它必须纯粹是$confirmation.= <<<EOT。另请注意,“EOT”可以与任何内容交换,但关闭标记必须匹配。因此,如果您愿意,可以使用<<<CONFIRMATION - random_user_name
1
@cale_b 你做得很好 - 我在 <<<EOT 行末有一个空格,在 EOT; 行前有制表符。去掉行末空格和行首制表符解决了错误。谢谢。 - rwkiii
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接