jQuery 트릭은 따옴표를 인코딩하지 않으며 IE에서는 공백을 제거합니다.
Django 의 이스케이프 템플릿 태그를 기반으로 이미 많이 사용 / 테스트 된 것으로 생각되는이 기능을 만들었습니다.
공백 제거 문제에 대한 해결 방법보다 훨씬 간단하고 빠를 수 있습니다. 예를 들어 속성 값 안에 결과를 사용하려는 경우 따옴표를 인코딩합니다.
function htmlEscape(str) {
return str
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
// I needed the opposite function today, so adding here too:
function htmlUnescape(str){
return str
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/&/g, '&');
}
2013-06-17 업데이트 :
가장 빠른 탈출을 검색 하면서이replaceAll
메소드 구현을 찾았습니다 :
http://dumpsite.com/forum/index.php?topic=4.msg29#msg29
(또한 여기에서 참조 : 가장 빠름) 문자열에서 문자의 모든 인스턴스를 바꾸는 방법 )
일부 성능 결과는 다음과 같습니다.
http://jsperf.com/htmlencoderegex/25
replace
위 의 내장 체인에 동일한 결과 문자열을 제공합니다 . 누군가 왜 그것이 더 빠른지 설명 할 수 있다면 매우 기쁠 것입니다!?
2015-03-04 업데이트 :
방금 AngularJS가 위의 방법을 정확하게 사용하고 있음을 알았습니다 :
https://github.com/angular/angular.js/blob/v1.3.14/src/ngSanitize/sanitize.js#L435
그들은 두 가지 세분화를 추가합니다- 모호하지 않은 모든 문자를 엔티티로 변환 할뿐만 아니라 모호한 유니 코드 문제 를 처리하는 것으로 보입니다 . 문서에 UTF8 문자 세트가 지정된 한 후자가 필요하지 않다는 인상을 받았습니다.
(4 년 후) Django는 여전히이 두 가지 중 어느 것도 수행하지 않기 때문에 이들이 얼마나 중요한지 잘 모르겠습니다.
https://github.com/django/django/blob/1.8b1/django/utils /html.py#L44
2016-04-06 업데이트 :
슬래시를 피할 수도 있습니다 /
. 올바른 HTML 인코딩에는 필요하지 않지만 OWASP 에서는 XSS 안전 방지 수단으로 권장합니다 . (의견에 이것을 제안 해 주신 @JNF에게 감사드립니다)
.replace(/\//g, '/');