\char can be used to write invalid raw characters
Author: anderskCreated Sep 25, 2020Updated Aug 2, 2026
Labelsbug
Using \char, KaTeX can be convinced to output raw characters that are invalid HTML5 and/or XML:
\char0: NUL character (invalid HTML5, XML)\char1–\char8,\char11,\char14–\char31: C0 control codes (invalid HTML5)\char12: form feed (invalid XML)\char127: DEL character (invalid HTML5)\char128–\char159: C1 control codes (invalid HTML5)\char55296–\char57343: unpaired surrogates (invalid HTML5, XML)\char64976–\char65007: noncharacters (invalid HTML5)\char65534,\char65535: noncharacters (invalid HTML5, XML)
The number is interpreted modulo 65536, so \char65536 also outputs a NUL character, etc.
> katex = require('katex'); katex.version
'0.12.0'
> katex.renderToString('\\char0').includes('\x00') // NUL character
true
> katex.renderToString('\\char1').includes('\x01') // C0 control code
true
> katex.renderToString('\\char12').includes('\f') // form feed
true
> katex.renderToString('\\char127').includes('\x7f') // DEL character
true
> katex.renderToString('\\char128').includes('\x80') // C1 control code
true
> katex.renderToString('\\char55296').includes('\ud800') // unpaired surrogate
true
> katex.renderToString('\\char64976').includes('\ufdd0') // noncharacter
true
> katex.renderToString('\\char65534').includes('\ufffe') // noncharacter
true
> katex.renderToString('\\char65536').includes('\x00') // NUL character again
trueSource: KaTeX/KaTeX