2012-11-08 2 views
2

PHP (wordpress plugin)의 Google Translate 코드를 페이지에 출력하려고하는데, 동일한 코드 행을 콘솔에 직접 붙여넣고 실행해도 불법 토큰 오류가 발생합니다. GT는에 오류왜 PHP에서 JavaScript를 출력 할 때 불법 토큰이 나옵니까?

Uncaught SyntaxError: Unexpected token ILLEGAL 

원인

<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> 

:

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/자바 스크립트로 페이지에 다음과 같은 출력 : 여기에

내 PHP입니다 = 이스케이프 (...); 선.

그러나 인스펙터를 사용하여 HTML 소스에서 직접 코드를 복사 한 다음 콘솔에 붙여넣고 실행하면 작동하고 드롭 다운 메뉴가 나타납니다.

왜 이런 일이 발생합니까?

감사합니다.

+0

는 이스케이프 문자열이 제대로 반환된다

"</script>" 

이 될해야

? 당신은 jslint에 붙여 넣었습니까? –

+0

왜 탈출/탈출합니까? 'gt = 'blahblahblah'; .prepend (gt)'도 마찬가지입니다. –

+0

@JayBlanchard 예 이스케이프 처리되지 않은 문자열이 정상적으로 돌아옵니다. PHP에서 HTML 출력 결과를 직접 복사하여 콘솔에 붙여 넣었으므로 완벽하게 실행되었습니다. 당신은 그것을 여기에서 볼 수 있습니다 : http://www.georgiancollege.ca/internationaldev/current-students/ – tsdexter

답변

4

문자 </script>의 순서는 항상 현재 스크립트 블록을 종료하는 것을 의미합니다. 나의 의심은 이것이 이것이 문제의 원인이라는 것이다.

</script> 그대로를 JavaScript 문자열에 포함 할 수 없습니다. 대신 파트를 분해하고 파트를 다시 연결해야합니다.

예. 이 :

"<" + "/script>" 
+0

고마워요. 하나의 큰 문자열 대신에 각 요소를 별도로 추가하는 것과 함께 사용했습니다. 이제 작동 중입니다. – tsdexter

0

변경 gt = escape('...')gt = '...'

+1

그 중 하나가 작동하지 않습니다 - PHP는 몇 가지 문제를 일으키는 원인이 탈출을 추가 - 그것은 도피의 유무에 관계없이 똑같습니다 ... – tsdexter

관련 문제