[javascript] JavaScript에서 따옴표를 이스케이프 처리

데이터베이스에서 값을 출력하고 있습니다 (실제 공개 공개는 아니지만 회사의 사용자가 공개 할 수 있습니다-즉, XSS 에 대해 걱정하지 않습니다 ).

다음과 같은 태그를 출력하려고합니다.

<a href="" onclick="DoEdit('DESCRIPTION');">Click Me</a>

DESCRIPTION은 실제로 다음과 같은 데이터베이스의 값입니다.

Prelim Assess "Mini" Report

“를 \”로 바꾸려고했지만 아무리 노력해도 Firefox는 Assess 라는 단어 뒤에 공백이 있으면 JavaScript 호출이 계속 끊어 지므로 모든 종류의 문제가 발생합니다.

나는 분명한 답을 그리워해야하지만 내 인생에서 나는 그것을 알아낼 수 없다.

내 바보를 지적하는 사람이 있습니까?

여기에 전체 HTML 페이지가 있습니다 ( ASP.NET 페이지가 될 것입니다. 그러나이 문제를 해결하기 위해 문제 코드 이외의 다른 것을 모두 제거했습니다)

<html>
    <body>
        <a href="#" onclick="DoEdit('Preliminary Assessment \"Mini\"'); return false;">edit</a>
    </body>
</html>



답변

DoEdit큰 따옴표 문자를 제거하려면 쓰고있는 문자열을 이스케이프해야합니다 . 그들은 일으키는 onclickHTML 속성이 조기에 종료 할 수 있습니다.

\HTML 컨텍스트 에서는 JavaScript 이스케이프 문자을 사용하는 것만으로는 충분하지 않습니다. 큰 따옴표를 적절한 XML 엔터티 표현으로 바꿔야합니다 &quot;.


답변

&quot; HTML 컨텍스트 때문에 나에게 제안한 것처럼이 특별한 경우에 작동합니다.

당신이 당신의 자바 스크립트 코드를 독립적으로 문맥 이스케이프하려는 경우, 당신은 네이티브 자바 스크립트 인코딩을 선택할 수 있습니다 :
'하게 \x27
"된다\x22

따라서 onclick은 다음과 같습니다.
DoEdit('Preliminary Assessment \x22Mini\x22');

예를 들어 JavaScript 문자열을 매개 변수로 다른 JavaScript 메서드에 전달할 때도 작동합니다 (이것은 alert()쉬운 테스트 방법입니다).

중복 스택 오버플로 질문, onClick 처리기 내부의 JavaScript 코드 내에서 문자열을 이스케이프 처리하려면 어떻게합니까? .


답변

<html>
    <body>
        <a href="#" onclick="DoEdit('Preliminary Assessment &quot;Mini&quot;'); return false;">edit</a>
    </body>
</html>

트릭을해야합니다.


답변

여러분, 이미 unescapeJavaScript에서 이스케이프 처리를하지 않는 함수가 있습니다 \":

<script type="text/javascript">
    var str="this is \"good\"";
    document.write(unescape(str))
</script>


답변

문제는 HTML이 이스케이프 문자를 인식하지 못한다는 것입니다. HTML 속성에 작은 따옴표를 사용하고 onclick에 큰 따옴표를 사용하면이 문제를 해결할 수 있습니다.

<a href="#" onclick='DoEdit("Preliminary Assessment \"Mini\""); return false;'>edit</a>


답변

이것이 기본적으로 내가하는 방법 str.replace(/[\""]/g, '\\"')입니다.

var display = document.getElementById('output');
var str = 'class="whatever-foo__input" id="node-key"';
display.innerHTML = str.replace(/[\""]/g, '\\"');

//will return class=\"whatever-foo__input\" id=\"node-key\"
<span id="output"></span>


답변

Java로 HTML을 어셈블하는 경우 Apache commons-lang의 멋진 유틸리티 클래스를 사용하여 모든 이스케이프를 올바르게 수행 할 수 있습니다.

org.apache.commons.lang.StringEscapeUtils
Java, Java Script, HTML, XML 및 SQL 용 문자열을 이스케이프 및 이스케이프 해제합니다.