2008-11-08 4 views
9

초기 "\"문자 자체가 "& # 92"로 이스케이프 된 유니 코드 문자 이스케이프 시퀀스 (\ uXXXX)가 포함 된 자바 스크립트 문자열을 표시하는 데 문제가 있습니다. 올바른 이스케이프 시퀀스를 평가하고 올바른 유니 코드 문자로 출력을 생성 할 수 있도록 문자열을 변환하려면 어떻게해야합니까? 예를 들어 이중 이스케이프 유니 코드 Javascript 문제

, 나는 같은 입력을 처리하고있다 :

"this is a \u201ctest\u201d";

가 디코딩을 시도하는 "& # 92;" 정규식 표현을 사용하여, 예를 들면 : 출력 텍스트에서

var out = text.replace('/\/g','\');

결과 :

유니 코드 이스케이프 시퀀스는 실제 이스케이프 시퀀스가 ​​아닌 큰 따옴표 문자로 표시되어있다

"this is a \u201ctest\u201d";

나는 원한다.

답변

0

이것이 맞는지는 모르겠지만 입력 내용을 신뢰할 수 있다면 대답은 eval()과 관련이있을 수 있습니다.

+2

거의 평가 절대로 정답입니다. –

0

나는 같은 줄을 생각하고 있었지만, 항상 상상할 수있는 eval()을 사용하여 동일한 이스케이프 처리 된 결과를 얻었습니다. 예를 들어,

eval(new String("this is a \u201ctest&#amp;92;u201d"));

또는

eval(new String("this is a \u201ctest&#amp;92;u201d".replace('/\/g','\')));

같은 일에 모든 결과 : 어떻게 든로 자바 스크립트 엔진을 얻을 필요가있는 경우 재평가 또는

"this is a \u201ctest\u201d";

그건 다시 문자열을 구문 분석하지만, 나는 그것을 어떻게 할 것인지 모른다. 아마 eval() 또는 제대로 이스케이프 된 입력을 사용하여 새 문자열을 만드는 것이 좋을지는 모르겠지만 지금은 행운이라고 생각했습니다. 근본적인 문제는

- 제가 지정된 캐릭터 설정하려면 어떻게해야합니까 : 적절한 유니 코드 문자를 사용하는 문자열로

"this is a \u201ctest&#amp;92;u201d"

를?

6

그것이 나오는 것에 따라, 그것은() 우리가 원하는 언 이스케이프하지만 '% Uxxxx에'이 아니라 '\ Uxxxx에'이상과 :

언 이스케이프 (yourteststringhere.대체 (/ & # 92;/g, '%'))

+0

이것이 일반적으로 작동하지 않을 것이라고 생각합니다. unescape은 멀티 바이트 유니 코드 문자를 처리하지 않는 URL에 사용됩니다. –

+0

4 개의 X가 멀티 바이트를 표시한다는 사실이 아닙니까? ;) 어쨌든, 그것은 FF3에서 나를 위해 작동합니다 : var yourteststringhere = "Ein sch \ u00F6nes Beispiel eines mehrsprachigen 텍스트 : \ u65E5 \ u672C \ u8A9E"; – Kev

+0

FF2, 추가 할 수 있습니다. – Kev

1

이 끔찍한 솔루션입니다,하지만 당신은이 작업을 수행 할 수는 :

var x = "this is a \u201ctest\u201d".replace(/\/g,'\\') 
// x is now "this is a \u201ctest\u201d" 
eval('x = "' + x + '"') 
// x is now "this is a “test”" 

그것은 끔찍 이유는

  • 평가 문자열에 무엇이 들어 있는지 모를 경우 위험 할 수 있습니다.문자열에 실제 따옴표가 있으면 eval 문에서 문자열 인용 부호가 손상됩니다.

+0

나는 여전히이 방법을 권장하지 않지만 다음과 같이 더 안전하게 만들 수 있습니다 :'eval ('x = "'+ x.replace (/ \/g, '\\'). \]) "/ g, '$ 1 \\"') + ' "')' – Kip

+0

기다림, 그것은 다른 방법으로 여전히 깨질 수 있습니다. 당신 말이 맞아요. 이것은 끔찍한 해결책입니다. +1은 여전히 ​​끔찍한 해결책임을 설명하고 이유를 설명하기 때문에 +1을 제공합니다. – Kip

1

'\'이 (가) HTML 이스케이프 처리가 가능한 유일한 문자입니까? '\ uXXXX'는 사용중인 유일한 문자열 이스케이프 종류입니까?

그렇지 않으면 범용 HTML 문자/엔티티 참조 디코더와 JS 문자열 리터럴 디코더가 필요합니다. 불행히도 JavaScript에는 내장 메소드가 없으므로 regexps가로드되면 수동으로 처리하는 것이 지루합니다.

은 요소의 innerHTML 속성에 문자열을 할당하여 브라우저의 HTML 디코더를 활용, 다음과 같은 위의 문자열을 디코딩 자바 스크립트를 요청할 수 있습니다 :

var el= document.createElement('div'); 
el.innerHTML= s; 
return eval('"'+el.firstChild.data+'"'); 

그러나이 믿을 수 없을 정도로 추악한입니다 문자열이 100 % 신뢰할 수없는 출처에서 나온다면 해킹과 보안 구멍이 생길 수 있습니다.

문자열의 출처는 어디입니까? 가능하면 더 강력한 텍스트 처리 기능을 사용할 수있는 서버 측 문제를 처리하는 것이 더 좋을 것입니다. 불필요하게 HTML을 이스케이프 처리하여 백 슬래시를 수정하면 문제를 해결할 수 있습니다.

관련 문제