【问题标题】:Escaping a Javascript Code Block and Function for PHP output为 PHP 输出转义 Javascript 代码块和函数
【发布时间】:2014-09-13 15:40:08
【问题描述】:

我不断收到ILLEGAL STRINGILLEGAL TOKEN。有什么想法吗?我想这是一个转义问题,但没有找到正确的解决方案。我正在转义单引号,因为其他代码在同一区域被转义。

我试过了:

  • 同时转义&等特殊字符。

  • “Heredoc”并相信这是我的解决方案的一部分,但仍然出现错误。

代码如下:

<?php
  $STRING .='
    <script type="application/javascript">

     function onPictureChanged() 
     {

       var href="http://pinterest.com/pin/create/button/?url="\' +   encodeURIComponent(location.href.replace(location.hash, "")) + \'"&media="\' + $(\'#fullResImage\').attr(\'src\');


       jQuery(\'.pp_social\').append(“<div class=\'pinterest\' ><a href=\'”+ href +”\' class=\'pin-it-button\' count-layout=\'horizontal\' target=\'_blank\'><img border=\'0\' src=\'http://assets.pinterest.com/images/PinExt.png\' title=\'Pin It\' /></a></div>”);

     }
    </script>';

echo $STRING;

【问题讨论】:

  • 您尚未关闭您的&lt;?php 标签(使用?&gt;)。您只是忘记在问题中包含它了吗?
  • 我不知道$STRING 是什么意思,但有几个合成酶允许按原样粘贴代码。例如,您可以简单地使用 ?&gt; 关闭 PHP 块。当然,我所知道的任何计算机语言都不会接受花哨的引号作为字符串分隔符。
  • @ChrisMukherjee 结束 php 标记 ?&gt; 不需要在文件末尾
  • @oliakaoil 我不知道。谢谢(你的)信息。但是,如果这不是文件的结尾,它可能仍然是一个问题。或许,他只是粘贴了相关的sn-p代码,实际上下面还有更多代码。
  • @ChrisMukherjee JQuery 是从哪里来的??

标签: javascript php escaping echo


【解决方案1】:

好的,答案肯定是由于尝试了多种方法而导致的不准确转义。解决方案是以下几种的组合:

  • Heredoc 大大简化了输出转义,如果不能完全消除对它的需要。 Use variable within heredoc in PHP (SQL practice)
  • 正确组合单引号和双引号
  • 确保不包含任何卷曲/花哨的引号...来自复制/粘贴或我的文本编辑器(请参阅上面的 Alvaro 评论)

@stefan 是的,您的评论绝对是问题的一部分!因为字符串是在 URL 中而不是输出到 html。

感谢您的所有帮助。一双新鲜的眼睛总是有帮助的!这是最终的工作代码:

$STRING .= 

<<<MY_MARKER
<script type="application/javascript">

function onPictureChanged() 
{

    var href="http://pinterest.com/pin/create/button/?url="+encodeURIComponent(location.href.replace(location.hash,""))+"&media="+$('#fullResImage').attr('src');

    jQuery('.pp_social').append('<div class="pinterest"><a href="+ href +” class="pin-it-button" count-layout="horizontal" target="_blank"><img border="0" src="http://assets.pinterest.com/images/PinExt.png" title="Pin It" /></a></div>');

}

MY_MARKER;

【讨论】:

    【解决方案2】:

    在某些情况下,您使用“而不是”。即”+ href +”\ 应该是"+ href +"\

    PS。 Mac 用户?您可以在 Preferences -> Keyboard -> Text

    下禁用该“助手”

    【讨论】:

    • 不错的收获!这肯定会导致ILLEGAL STRINGILLEGAL TOKEN 错误。
    • @stefan JQuery 是从哪里来的??
    • @CodeLover jQuery 可能包含在文件或模板的另一部分中。如果这不包括在内,则会给出像 jQuery is not defined 这样的错误,但这超出了这个问题的范围。
    • 是的,很好地抓住了引号......但不是解决方案......我刚刚注意到的是错误 ILLEGAL TOKEN 后面没有元素。比如它是一个错位的';'它会说'非法令牌;'与 ILLEGAL STRING 相同,未识别元素。
    • 我还在"http://pinterest.com/pin/create/button/?url="\' + .... 看到了一个奇怪的转义,这不就是"http://pinterest.com/pin/create/button/?url=" + .... 吗? (在字符串中以此类推)
    猜你喜欢
    • 2015-09-05
    • 2018-03-07
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多