从PHP输出JavaScript时为什么会出现非法令牌?

时间:2012-11-08 19:29:38

标签: php javascript jquery wordpress wordpress-plugin

我正在尝试从PHP(wordpress插件)输出谷歌翻译代码到页面,它给了我非法令牌错误,即使我将完全相同的代码行直接粘贴到控制台并运行它,它的工作原理。

这是我的PHP:

    function AddTranslateSidebar(){
  echo "<script>
    jQuery(document).ready(function(){
      gt = escape('<div id=\"google_translate_element\"></div><script type=\"text/javascript\">function googleTranslateElementInit() {new google.translate.TranslateElement({pageLanguage: \"en\", layout: google.translate.TranslateElement.InlineLayout.SIMPLE}, \"google_translate_element\");}</script><script type=\"text/javascript\" src=\"http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit\"></script>');
      jQuery('#sidebar').prepend(unescape(gt));
    });
  </script>";
}

该代码将以下内容作为HTML / JavaScript输出到页面中:

<script>
    jQuery(document).ready(function(){
      gt = escape('<div id="google_translate_element"></div><script type="text/javascript">function googleTranslateElementInit() {new google.translate.TranslateElement({pageLanguage: "en", layout: google.translate.TranslateElement.InlineLayout.SIMPLE}, "google_translate_element");}</script><script type="text/javascript" src="http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>');
      jQuery('#sidebar').prepend(unescape(gt));
    });
  </script>

导致错误

Uncaught SyntaxError: Unexpected token ILLEGAL 

在gt = escape(...)上;线。

但是,如果我使用检查器直接从HTML源代码复制该代码,然后将其粘贴到控制台并运行它,它就可以运行并显示转换下拉列表。

为什么会这样?

感谢。

2 个答案:

答案 0 :(得分:4)

字符序列</script>始终意味着结束当前脚本块。我怀疑这是造成这个问题的。

您不能在JavaScript字符串中包含</script>逐字。相反,你需要拆分它并重新连接各个部分。

E.g。这样:

"</script>"

应该成为这个:

"<" + "/script>"

答案 1 :(得分:0)

gt = escape('...')更改为gt = '...'