2013-11-21 5 views
0

블로거에서 javascript를 사용하고 있지만 문자 '¡'와 '?'를 사용하는 이상한 동작이 있습니다. 예를 들어, 다음 코드는 ñéúüëò¡!¿?을 div에 넣지 만, ñéúüëò¡!¿? 경고 메시지로 표시합니다. 우리는 생성 된 코드를 보면javascript를 사용하는 블로거의 이상한 utf8 char 동작

<div id="test"> 
    </div> 
    <script> 
    (function() { 
     document.getElementById("test").innerHTML = 'ñéúüëò¡!¿?'; 
     alert('ñéúüëò¡!¿?'); 
    })(); 
    </script> 
</pre> 

, 우리는 자바 스크립트 태그로 변환 된 것을 볼 수있다 : 나는 외부 JS를 사용할 수 있습니다, 그러나

<script> 
(function() { 
document.getElementById("test").innerHTML = 'ñéúüëò&#161;!&#191;?'; 
alert('ñéúüëò&#161;!&#191;?'); 
})(); 
</script> 

<div id="test"> 
</div> 
<script src="http://foo.bar/file.js"></script> 

존재 js 파일 (utf8로 인코딩 됨) :

document.getElementById("test").innerHTML = 'ñéúüëò¡!¿?'; 
alert('ñéúüëò¡!¿?'); 

그 결과가 예상됩니다 : ñéúüòò! ¿? div 안에ñéúüòò! ¿? 경고 메시지.

여전히

더 이상, 나는 너무 깨끗하지 않은 경우에도, 원하는 행동을 이끌어 블로거에 다음 코드를 작성할 수 있습니다

<div id="div1" style="display:none">¡</div> 
<div id="div2" style="display:none">¿</div> 

<div id="test"> 
</div> 

<script> 
(function() { 
    document.getElementById("test").innerHTML = 'ñéúüëò¡!¿?'; 
    alert('ñéúüëò'+ document.getElementById('div1').innerHTML + '!' + document.getElementById('div2').innerHTML +'?'); 
})(); 
</script> 

수있는 사람이 내가 적절하고 깨끗한 코드를 작성할 수있는 방법을 나에게 설명 외부 js 파일을 사용하지 않고이를 해결하려면?

답변

1
'ñéúüëò¡!¿?' 

는 오버 이스케이프 스크립트 요소 기관의 일어나고있는 과거를하거나 할 수있는

'ñéúüëò\u00a1!\u00bf?' 

을 쓸 수있는 다른 방법은 7 비트 ASCII 코드 코드가 포함되어

'\u00f1\u00e9\u00fa\u00fc\u00eb\u00f2\u00a1\u0021\u00bf\u003f' 

포인트이므로 문자 집합 혼동이나 지나치게 열정적 인 회피자가 될 확률이 적습니다.

은 유니 코드 포인트 포인트 241을 인코딩합니다.보다 일반적으로 \u 다음에 4 개 16 진수 숫자가 정수 값이 4 자리 16 진수로 지정되는 코드 포인트를 인코딩합니다.

+0

답변 주셔서 감사하지만 .... 왜 블로거는 문자 '¿'와 '¡'만 코드화하고 나머지는 ASCII 문자가 아닌 코드화합니까? 이것이 문제를 해결할지라도, 나는 문자를 헥사 방식으로 쓰는 것이 매우 성가신다고 생각한다. 고객이 '...'을 쓸 수 없다는 것을 설명하려고 시도한다. 그리고 '\ u00a1' –

+0

@JorgeSainz, 내가 당신에게 준 이유는 무엇이겠습니까?하지만 나는 편지 문자 중 어느 것도 이스케이프가 필요하지 않지만 ASCII가 아닌 구두점은 사용하지 않는다는 것을 알았습니다. –