11

러시아어로 명명 된 노드를 포함하는 XML 문서 (JavaScript 포함)를 만들어야합니다. 이 코드는 문제없이 작동하고 다른 브라우저에서는 var doc = document.implementation.createDocument("", "", null)IE11에서 키릴 문자로 XML 노드를 만들 수 없습니다

만들어집니다 실행을 doc.createElement("Выборка")

doc을 시도 할 때

나는 IE11에서 InvalidCharacterError를 얻을.

어떻게 해결할 수 있습니까? 문제의 근원은 무엇입니까?

jsFiddle 예 : http://jsfiddle.net/e4tUH/1/

내 포스트 connect.microsoft.com 에 : https://connect.microsoft.com/IE/feedback/details/812130/cant-create-xml-node-with-cyrillic-name-in-ie11

현재 해결 방법 : 스위치 X-UA-Compatible 메타 태그 IE10에 IE11 및 XML을 생성 window.ActiveXObject(...)를 사용 서류.

+0

점검, 또한 HTTP 응답 헤더를 확인합니다. – vbence

+0

원본 파일 자체가 실제로 UTF-8로 인코딩되었는지 확인하십시오. –

+0

내 출처는 UTF-8입니다. Doctype이 지정되었습니다. – Olegas

답변

2

아마 IE11은 파이어 폭스가 과거에 한 것과 유사한 문제가 있습니다

https://bugzilla.mozilla.org/show_bug.cgi?id=431701

페이지가 올바른 인코딩을로드하지만, IE11이 기본 인코딩으로 새 문서를 만드는 것을 의미한다 예상 한 것이 아닙니다. 우리가 가지고 있지 않은 IE11 소스 코드를 조사하는 것 외에는 확인할 방법이 없습니다.

요소 이름 외에 다른 장소에 비 ASCII 문자를 추가하려고하십니까? 속성 값이나 텍스트 노드처럼?

작성된 문서 인코딩을 변경하는 방법을 검색했으나 해결 방법을 찾지 못했습니다.

나는 다음처럼 DOMParser를 사용하고 XML 문자열에서 문서를 생성하기 위해 제안 문제를 해결하려면

var parser=new DOMParser(); 
var xmlDoc=parser.parseFromString('<?xml version="1.0" encoding="UTF-8"?><Выборка>Выборка текста</Выборка>',"text/xml"); 

모든 브라우저는 XML 파싱을 위해 그것을 지원하는 것 같습니다.

https://developer.mozilla.org/en-US/docs/Web/API/DOMParser

그냥 문자열을 연결하여 XML을 생성하지 않으려면

http://www.w3schools.com/dom/dom_parser.asp

, 당신은 할 수 있습니다 DOMParser에 대한 자세한 오래된 IE 버전과의 호환성을 제공하는 방법을 포함하여 다음 링크에서 이 예에서와 같이 XML 빌더의 어떤 종류를 사용 http://jsfiddle.net/UGYWx/6/

그런 다음 당신은 쉽게 더 안전한 방식으로 XML을 생성 할 수 있습니다 :

var builder = new XMLBuilder("rootElement"); 
builder.text('Some text'); 

var element = builder.element("someElement", {'attr':'value'}); 
element.text("This is a text."); 

builder.text('Some more Text'); 
builder.element("emptyElement"); 
builder.text('Even some more text'); 

builder.element("emptyWithAttributes", {'a1': 'val1', 'a2' : 'val2'}); 

$('div').text(builder.toString()); 
+0

이것은 좋지 않습니다. 왜냐하면 'XML이 아닌 간단한 텍스트로 XML 태그를 빌드해야합니다. 이것은 훨씬 더 오류가 발생하기 쉬운 솔루션입니다 = (그런데, 문자열과 노드에서 러시아어 태그 이름을 가진 문서를 구문 분석하더라도 (정확하게 'nodeName'이 올바르게 표시됩니다) 러시아어 이름을 가진 다른 노드를 만들 수 없습니다. – Olegas

+0

'createDocument()'를 사용하여 문서를 만들 때와 같은 오류가 발생합니까? – visola

+0

예, 이전과 같은'InvalidCharacterError' 예 jsFiddle로 시연 할 수 있습니다 – Olegas

-1

저는 소스 코드 내에서 비 ​​ASCII 문자를 사용하는 것을 항상 꺼려했습니다. 문자열을 이스케이프 해 봅니다. 어쩌면 도움이 될지도 모른다.당신은`doctype`을 지정 여부를 HTML 문서가 UTF-8 암시` `요소를 포함하는 경우

doc.createElement("\u0412\u044B\u0431\u043E\u0440\u043A\u0430") 
관련 문제