Jakie znaki muszą być unikane w HTML 5?

HTML 4 określa które znaki powinny być Escape:

Cztery odniesienia do encji znaków zasługują na szczególną uwagę, ponieważ są często używane do ucieczki znaków specjalnych:

  • "
  • " > " reprezentuje znak>.
  • " & " reprezentuje znak&.
  • ""oznacza" znak.

Autorzy pragnący aby umieścić znak " " (ASCII decimal 62) w tekście zamiast">", aby uniknąć problemów ze starszymi agentami użytkowników które błędnie postrzegają to jako koniec znacznika (tag close delimiter), gdy pojawia się w cudzysłowach wartości atrybutów.

Autorzy powinni używać "&" (ASCII decimal 38) zamiast"&", aby uniknąć pomieszanie z początkiem referencji znakowej (encja reference open delimiter). Autorzy należy również użyć " & " w wartości atrybutów, ponieważ odniesienia do znaków są dozwolone w CDATA wartości atrybutów.

Niektórzy autorzy używają referencji encji znakowej "" do kodowania wystąpienia podwójnego znaku cudzysłowu ( " ), ponieważ znak ten może być służy do oddzielania wartości atrybutów.

Dziwię się, że nie mogę znaleźć czegoś takiego w HTML 5. Z pomocą grepa jedyna wzmianka nie dotycząca XML - a, jaką udało mi się znaleźć, pojawia się na bok w odniesieniu do przestarzałego XMP element :

Zamiast tego używaj pre i kodu, a znaki "

Czy mógłby w jakiś sposób wskazać oficjalne źródło w tej sprawie?

Author: ezequiel-garzon, 2014-09-01

3 answers

Specyfikacja definiuje składnię elementów normalnych jako:

Normalne elementy mogą zawierać tekst, odwołania do znaków, inne elementy i komentarze, ale tekst nie może zawierać znaku u+003C mniej niż znak (

Więc musisz uciec <, LUB &, po którym następuje cokolwiek, co może rozpocząć odniesienie do znaku. Reguła na ampersandach jest jedyną taką regułą dla cytowanych atrybutów, ponieważ pasujący znak cudzysłowu jest jedyną rzeczą, która go zakończy. (Oczywiście, jeśli nie chcesz kończyć wartości atrybutu, Usuń znak cudzysłowu.)

Te zasady nie dotyczą <script> i <style>; Należy unikać umieszczania w nich dynamicznych treści. (Jeśli musisz dołączyć JSON do <script>, zamień < Na \x3c, znak U+2028 na \u2028, a U+2029 na \u2029 po serializacji JSON.)

 6
Author: Ry-,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-06 04:20:07

Od http://www.w3.org/html/wg/drafts/html/master/single-page.html#serializing-html-fragments

Wypisanie ciągu (na potrzeby algorytmu* powyżej) składa się wykonanie następujących kroków:

  1. Zastąp każde wystąpienie znaku " & "łańcuchem znaków"&".
  2. Zastąp dowolne wystąpienia spacji U+00A0 przez łańcuch"".
  3. jeśli algorytm został wywołany w atrybucie mode, zamień dowolne wystąpienia znaku """ na ciąg znaków""".
  4. jeśli algorytm nie został wywołany w trybie atrybutów, zastąp dowolne wystąpienia znaku " "przez łańcuch">".

*algorytm jest wbudowanym algorytmem serializacji nazywanym np. przez getter innerHTML.

Ściśle mówiąc, nie jest to dokładnie aswer do twojego pytania, ponieważ zajmuje się serializacja zamiast parsowania. Ale z drugiej strony, serializowane wyjście jest zaprojektowane tak, aby można je było bezpiecznie analizować. Tak więc, przez implikację, pisząc znaczniki:

  1. znak & należy zastąpić &amp;
  2. spacje niełamliwe powinny być unikane jako &nbsp; (niespodzianka!...)
  3. wewnątrz atrybutów, " powinien być przechowywany jako &quot;
  4. poza atrybutami, < powinien być przechowywany jako &lt;, a > powinien być przechowywany jako &gt;

I ' m intencjonalnie pisząc "should", a nie "must" , ponieważ parsery mogą być w stanie skorygować powyższe naruszenia.

 4
Author: user123444555621,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-09 21:50:00

Dodaję mój głos, aby nalegać, że rzeczy nie są takie proste -- ściśle mówiąc: {]}

Przypadek 1: serializacja HTML

(najczęściej)

Jeśli serializujesz swój HTML5 jako HTML, " tekst nie może zawierać znaku u+003C mniej niż znak (

Niejednoznaczny ampersand to " ampersand po którym następuje jeden lub więcej alfanumerycznych znaków ASCII, po których następuje średnik U+003B (;)"

Ponadto, " parsowanie pewnych odwołań do nazwanych znaków w atrybutach odbywa się nawet przy pominięciu średnika zamykającego."

W takim przypadku editable && copy (zwróć uwagę na spacje wokół &&) jest poprawne HTML5 serializowane jako konstrukcja HTML, ponieważ żaden z ampersandów nie jest poprzedzony literą.

Jako przeciwny przykład: editable&&copy nie jest bezpieczny (nawet jeśli może praca) jako ostatnia Sekwencja &copy może być interpretowana jako odniesienie do encji dla ©

Przypadek 1: serializacja XML

(mniej powszechne)

Tutaj obowiązują klasyczne reguły XML. Na przykład, każdy ampersand w tekście lub w atrybutach powinien być znakowany jako &amp;.

W takim przypadku && (ze spacjami lub bez) jest nieprawidłowym XML. Powinieneś napisać &amp;&amp;

Trudne, prawda ?
 3
Author: Sylvain Leroux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-17 13:02:54