11

ノードを含むxmlドキュメント(JavaScriptを使用)を作成する必要があります。名前はrussianです。IE11にキリル文字のXMLノードを作成できません

しようとして実行doc.createElement("Выборка")

docは、このコードは何の問題もなく働いている他のブラウザではvar doc = document.implementation.createDocument("", "", null)

を使用して作成されたとき、私は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

HTMLドキュメントもHTTPレスポンスヘッダをチェックし、UTF-8をヒンティング '' 要素を含み、そしてあなたが 'doctype'を指定しているかどうかかどうかを確認します。 – vbence

+0

ソースファイル自体が実際にUTF-8でエンコードされていることを確認してください。 –

+0

ソースはUTF-8です。 Doctypeが指定されています。 – Olegas

答えて

2

はたぶん、IE11は、Firefoxが過去に持っていたものと同様の問題があります:

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解析のためにそれをサポートするようです。あなたはあなたができる、単に文字列を連結してXMLを生成したくない場合は

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

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

:古いIEのバージョンとの下位互換性を提供する方法を含め、以下のリンク、上はDOMParserの詳細この例のようにXMLビルダのいくつかの種類を使用します。http://jsfiddle.net/UGYWx/6/

その後、あなたは簡単に、より安全な方法であなたのXMLを作成することができます。

+0

これは良いことではありません。「XMLタグではなく単純なテキストとしてXMLタグを構築する必要があります。これははるかにエラーが発生しやすい解決策です=(ちなみに、文字列とノードからロシア語のタグ名を持つ文書を解析しても( 'nodeName'は正しく表示されます)、ロシア語の名前を持つ他のノードは作成できません。 – Olegas

+0

'createDocument()'を使用してドキュメントを作成するときと同じエラーが発生しますか? – visola

+0

はい、前と同じ 'InvalidCharacterError'。jsFiddleでデモできます – Olegas

-1

私は、ソースコード内で非ASCII文字を使用することを常に嫌ってきました。文字列をエスケープしてみてください。多分それは助けます。

doc.createElement("\u0412\u044B\u0431\u043E\u0440\u043A\u0430")