11

私は完璧ではないマスターデータで作業しなければならないウェブサイトを構築しています(私だけではないと思います:-))

私の場合、xml filteをhtmlにレンダリングする必要があります(xslを使用)。マスターデータがすでにhtml-enititesを使用している場合éがあるため(たとえば、フランス語で)、二重エンコードを回避するために、そこで'disable-output-escaping='yes'を使用する必要があります。

最も簡単な解決策は、出力のエスケープをすべて無効にすることです。そのため、二重エンコードのリスクを冒すことはありません。

このマスターデータのエンコードを見逃している文字は、アンパサンドだけです。しかし、私がそれらを「生」で解析すると(つまり、&すべてのブラウザーが問題ないように見えます)。

だから質問:htmlでエンコードされていないアンパサンドを使用した結果は何ですか?

4

3 に答える 3

8

場合によります

このトピックに関して私が見た中で最高の研究はここにあります

HTML5では、以下のカテゴリに分類されないすべてのアンパサンドをエスケープする必要があります。

あいまいなアンペアサンドは、U + 0026 AMPERSAND文字(&)の後に、U + 0030 DIGIT ZERO(0)からU + 0039 DIGIT NINE(9)、U + 0061 LATIN SMALLLETTERAからU + 007A LATIN SMALL LETTER Z、およびU + 0041 LATIN CAPITALLETTERAからU+005A LATIN CAPITALLETTERZの後にU+003Bセミコロン文字(;)が続きます。これらの文字は、名前付き文字参照セクション。

于 2012-06-27T07:51:09.900 に答える
8

AFAIKの裸のアンパサンドはHTMLでは違法です。それが邪魔にならないように、結果を見てみましょう:

  • 現在、問題を検出して適切に回復するために、ブラウザーの機能に依存しています。これを行うには、ブラウザが推測する必要があることに注意してください。:は「明らかに」アンパサンドの後にスペースが続き、©明らかに著作権記号です。しかし、テキストフラグメントはedit&copyどうですか?私が今使っているブラウザはそれを壊します。
  • XHTMLを使用している場合、またはコンテンツがXMLドキュメントに挿入される場合は、ハードパーサーエラーが発生します。

これらのケースを手動で検出して説明することは、エンティティの一部ではないすべてのアンパサンドを置き換える(たとえば正規表現で)よりも難しいため、実際には後者を行う必要があります。

于 2012-06-27T07:52:14.870 に答える
4

「&」を「&」として本当にエンコードする必要がありますか?を参照してください。

要約すると、可能ですが、厳密に言えば、それは合法ではありません(HTML5で、文字エンティティのように「見えない」限り合法である場合を除く)。

于 2012-06-27T07:53:40.717 に答える