2

タグのhref属性でHTML エンティティを処理するための仕様を探しています。<a>これまでのところ、うまくいきません (あまりにも具体的なものを検索している可能性があります)。

詳細に:

私が修正しようとしているバグは、cheerioプロジェクト一部です。

末尾にセミコロンを必要としないエンティティもあります。それらの1つはです&curren。とにかく、これはソースが にリンクするときに問題を引き起こします/test/example.jsp?item=123&currentSize=S&currentQty=1

ブラウザー (少なくとも Chrome) はこれを適切に処理します。理由はまだわかりませんが。

4

2 に答える 2

5

HTML 4.01 までの HTML については、@Quentin の回答を参照してください。

XHTML シリアライゼーションの HTML5 を含む XHTML のフレーバーに関して&currentSize=は、整形式エラーが含まれているため、ドキュメントの表示は中止されます (ドキュメントが真の XHTML として処理される場合)。

HTML シリアライゼーションの HTML5 では、文字参照を解析するためのトリッキーなアドホック ルールがあります。それらは、テキスト コンテンツでは、 が書かれているかのように、つまり として&currentSize=解析されることを暗示しています。ただし、 のような属性値内では、セミコロンで終了していないため、特定の条件下では参照が認識されません。&curr;entSize=¤entSize=<a href="...">

具体的には、そこに記載されている条件は次のとおりです。(U+003B) 文字であり、次の文字は "=" (U+003D) 文字、または範囲内の ASCII 数字、大文字の ASCII 文字、または小文字の ASCII 文字のいずれかであり、歴史的な理由から、 U+0026 AMPERSAND 文字 (&) の後に一致するものは未使用でなければならず、何も返されません。そのため、定義済みの名前&foobar=であっても、属性値でnoは認識されません。foobar

その理由は、作成者がエスケープせずに URL を属性値に広く記述しており&、ブラウザーがこれに適応しているためです。

于 2013-04-23T11:48:49.117 に答える
3

あまりにも具体的なものを探しているのかもしれません。

あなたは。これらは、他の場所 (CDATA を含むと定義された要素の外) と同じように扱われます。

HTMLで文字参照が評価される場所を示す具体的かつ明示的なものは見つかりませんが、属性セクションはそれを次のように暗示しています。

すべての属性値は、二重引用符 (ASCII 10 進数 34) または単一引用符 (ASCII 10 進数 39) のいずれかを使用して区切られます。値が二重引用符で区切られている場合は属性値に単一引用符を含めることができ、その逆も可能です。&#34;著者は、二重引用符 ( ) および単一引用符( )を表すために数字参照を使用することもできます&#39;。二重引用符については、作成者は character entity reference も使用できます&quot;

HTML 5 では、ルールが次のように変更されています。

「;」で終わるものでなければなりません (U+003B) 文字。

…そして同じバリエーション。

ただし、一部のブラウザーは、エンティティの後に名前以外の文字が続く場合にセミコロンが省略可能であった古い標準をまだサポートしています。これの標準は、有料の ISO SGML 仕様ですが、HTML 4.0 には次のように書かれています。

注: SGML では、最後の ";" を削除することができます。場合によっては、数値または名前付き文字参照の後 (たとえば、改行またはタグの直前)。他の状況では、削除されない場合があります (たとえば、単語の途中)。「;」を使用することを強くお勧めします。すべての場合において、この文字の存在を必要とするユーザー エージェントの問題を回避するためです。

つまり、下位互換性と明確さのために、属性の URL に文字を含めたい場合は、単に として表します&href&amp;。それはどこでも機能します。

于 2013-04-23T08:51:00.000 に答える