2012-11-08 47 views
2

我試圖從PHP(wordpress插件)輸出谷歌翻譯代碼到頁面,它給我非法令牌錯誤,即使當我將完全相同的代碼行直接粘貼到控制檯並運行它時,它可以工作。爲什麼從PHP輸出JavaScript時會出現非法令牌?

這是我的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源代碼複製該代碼,然後將其粘貼到控制檯並運行它,它將起作用,並且會顯示translate下拉菜單。

這是怎麼發生的?

謝謝。

+0

進行適當的返回的字符串轉義?你有沒有粘貼到jslint? –

+0

爲什麼逃避/ unescape? 'GT = 'blahblahblah'; .prepend(gt)'也可以。 –

+0

@JayBlanchard是的,非轉義的字符串正常回來 - 正如我所說,我直接從PHP的HTML輸出複製輸出,並將其粘貼到控制檯,它運行得很好。你可以在這裏看到:http://www.georgiancollege.ca/internationaldev/current-students/ – tsdexter

回答

4

字符</script>的順序總是意味着結束當前的腳本塊。我懷疑這是造成這個問題。

您不能在腳本中包含</script>字符串。相反,您需要拆分它並重新連接這些部分。

E.g.這樣的:

"</script>" 

應該成爲這樣的:

"<" + "/script>" 
+0

謝謝。我一起使用這個並附加每個元素而不是一大串元素。現在正在工作。 – tsdexter

0

變化gt = escape('...')只是gt = '...'

+1

這也行不通 - 我添加了逃跑因爲PHP導致了一些問題 - 它是完全相同的有或沒有逃脫... – tsdexter

相關問題