2009-11-02 4 views
33

자바 스크립트에서 인용 문자열 안에 끝 스크립트 태그가 있고 스크립트를 죽이는 문제가 있습니다. 나는 이것이 예상 된 행동이 아니라고 가정합니다. 이 예는 여기에서 볼 수있다 : http://jsbin.com/oqepe/editJavaScript 문자열의 스크립트 태그

관심에 대한 나의 테스트 케이스 브라우저 : 모질라/5.0 (X11; U, 리눅스는 i686; EN-US; RV : 1.9.1.4) 게코/20091028 우분투/9.10 (karmic) Firefox/3.5.4.

답변

64

어떻게됩니까?

브라우저 HTML 구문 분석기는 문자열 내에 </script>을 볼 수 있으며 스크립트 요소의 끝으로 해석합니다.

단어 스크립트 요소의 외부 텍스트 콘텐츠로서 취급되고 바 ...

일반적으로 사용되는 기술은

<script> 
var test = 'foo... </script> bar.....'; 
</script> 

참고한다 : 본 실시 예의 구문 색에

찾는 연결 연산자를 사용하려면

+3

이것은 효과가 있지만,해야한다는 것에 놀랐습니다. 문제의 일부는 페이지를 고치고 결과를 JS 변수에 저장한다는 것입니다. 나는 돌아 오는 것에 대해 진정한 기대가 없다. – re5et

+0

어떻게 변수에 저장하고 있습니까? 당신은 서버 측을 긁어서'var x = ; '을 생성합니까? 그렇다면 JSON 인코딩하는 것을 잊지 마십시오. – orip

+12

/를 이스케이프 처리하고 문자열을 부분으로 분할하지 마십시오. IIRC는 HTML 4.x에서 여전히 오류입니다. 그것은 확실하게 입력하기가 더 까다 롭고, 다루기가 더 힘들고 덜 효율적입니다. (문자열 연결은 JS 작업 중 가장 저렴한 것이 아니기 때문에) – Quentin

11

당신은 그것을 탈출해야합니다. 그렇지 않으면 HTML의 일부가됩니다.

var test = 'what the hell... \<\/script\> \<h1\>why?!?!?!\<\/h1\>'; 
+5

이 올바르지 않습니다. 이것은 텍스트를 저장하는 변수입니다. HTML에 삽입되지 않습니다. 스크립트 이외의 태그를 사용하면 동일한 결과가 발생하지 않습니다. – re5et

+0

XML이 렌더링되는 방식입니다. 를 사용하여 스크립트를 래핑 할 수도 있습니다. XML 파서가 작동하는 방식 (특히 스크립트가 텍스트가 아닌 코드로 취급되기 때문에)은 다른 태그에서 발생하지 않습니다. – LiraNuna

+1

@LiraNuna 음. 아니요. XML 구문 분석기는 ''을 '스크립트 종료'로 취급하고 ''은 형식 오류로 처리합니다. HTML 파서는''을 "스크립트의 끝"으로 처리하고, ""을 "사양에 의해 정의되지 않은 처리로 오류"로 처리합니다. 태그 수프 파서 만 (아마도 HTML5 파서인데 필자는 충분히 초안을 읽지 않았기 때문에) 스크립트의 일부로 ''을 처리 할 것입니다. – Quentin

관련 문제