2

xhtml(ヘッダーはdoctype)として配信されるWebサイトがあります。サーバーからデータを取得します。このデータには、 を介してこれを含む文字列を設定しようとするとエラーが発生するエンティティが含まれている場合がありますinnerHTML。サーバーサイドでこのすべてのアイテムを置き換えることができることをすでに知っていますが、知りたいのは次のとおりです。

サーバー上で置き換える代わりに、このエンティティをdoctype宣言に追加することもできますか?

編集:

言い換えれば、なぜこれを行うのですか?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
[
    <!ENTITY nbsp  "&#160;">
]>

うまくいかない?

4

1 に答える 1

1

アップデート2:

http://www.w3.org/TR/2008/WD-html5-20080610/dom.html#innerhtml1 (設定の第2部)から、XHTMLのアルゴリズムはDOCTYPE情報を認識しているかどうかについて言及していないようです。 、少なくとも名前空間を認識していますが。(よりシンプルでありながら標準に準拠したXHTML5 DOCTYPEに切り替えたことに注意してください。)

次のテストケースを提供してバグとして報告するか、WhatWGメーリングリストに掲載することをお勧めします。動作は少なくとも指定する必要があると思います(そうでない場合は、私はそうではありません)。それを見て):

<!DOCTYPE html [
    <!ENTITY nbsp "&#160;">
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<div id="a">old&nbsp;text</div>
<script><![CDATA[
document.getElementById('a').innerHTML = 'new&nbsp;text';
]]></script>
</html>

それまでの間、サーバーで置き換えたくない場合は、次のようなハックを使用できますDOMParser()

<!DOCTYPE html [
    <!ENTITY nbsp "&#160;">
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<div id="a">old&nbsp;text</div>
<script><![CDATA[

document.getElementById('a').innerHTML = new DOMParser().parseFromString(
    '<!DOCTYPE html [<!ENTITY nbsp "&#160;">]>'+
    '<html xmlns="http://www.w3.org/1999/xhtml">'+
      'new&nbsp;text'+
    '</html>',
    'application/xhtml+xml'
  ).documentElement.innerHTML;

]]></script>
</html>
于 2012-09-29T23:08:41.887 に答える