Valid HTML tag name character

Matteo Pagliazzi picture Matteo Pagliazzi · Mar 3, 2013 · Viewed 7.2k times · Source

I'm having problems finding out what the valid characters are for an HTML tag.

In this (Is the at-sign (@) a valid HTML/XML tag character?) answer it says:

After another look at the XML Specification:

A tag consists of:

'<' Name (S Attribute)* S? '>' A Name consists of:

NameStartChar (NameChar)* A NameStartChar consists of:

":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] A NameChar consists of:

NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] The @ sign is U+0040

So the @ sign is not valid in a NameChar or a NameStartChar, and thus not valid in a Name.

But on the HTML syntax page (http://www.w3.org/TR/html-markup/syntax.html#tag-name) it only says:

Tag names are used within element start tags and end tags to give the element’s name. HTML elements all have names that only use characters in the range 0–9, a–z, and A–Z.

What are the valids characters in an HTML tag name? And are there differences between HTML4, XHTML and HTML5?

Answer

Fabian Barney picture Fabian Barney · Mar 3, 2013

HTML documents must fit HTML specification. XML documents must fit XML specification. XHTML documents must fit XML and HTML specification.

So for XHTML docments you must take the intersection of valid characters from both specifications. Since XHTML is based on XML the specification it cannot allow characters that are forbidden in XML. Therefore the allowed characters in XHTML are always a subset of the ones from XML. So the allowed characters are that from the XHTML specification.