【问题标题】:Escape single quotes in string containing single and double quotes转义包含单引号和双引号的字符串中的单引号
【发布时间】:2016-07-28 21:00:15
【问题描述】:

我有一个包含单引号和双引号的 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>';

我认为不需要转义双引号。尽管如此,我在加载页面时的所有尝试都会导致 HTTP 500。

这个字符串中的单引号是怎么转义的?

【问题讨论】:

标签: php


【解决方案1】:

要在 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;

【讨论】:

  • 你是对的。代码在functions.php 中——我在编辑器中打开了另一个窗口,完全搞糊涂了——两次。 :S 是 PHP。
  • YAY for heredoc 不能同意更多,对于需要大量转义的复杂变量,heredoc 语法是要走的路。
【解决方案2】:

$confirmation .= '&lt;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=""&gt;Share on Facebook&lt;/a&gt;';

【讨论】:

  • 这篇文章的两个答案对我来说都是正确的。我试着像你和布兰登的例子一样逃避它们,但没有成功。
  • PHP Parse error: syntax error, unexpected '&lt;&lt;' (T_SL)
  • 你使用了 3 个
  • @rwkiii - 在该行的&lt;&lt;&lt;EOT 后面不能有任何空格,它必须是纯粹的$confirmation.= &lt;&lt;&lt;EOT。另请注意EOT 可以与任何东西交换,但关闭必须匹配。所以,如果你愿意,可以是&lt;&lt;&lt;CONFIRMATION....
  • @cale_b 你搞定了——我在&lt;&lt;&lt;EOT 行的末尾有一个空格,在EOT; 行之前有一个制表符。删除尾随空格和前导制表符可解决该错误。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2021-08-16
  • 2011-06-13
  • 2013-06-30
相关资源
最近更新 更多