CSS escape

エスケープ (CSS)

[6] CSS ではほとんどあらゆるところで文字escape して使うことができます。

[8] CSS の他、共通の構文を使っている、選択子媒体照会でも escape を使えます。

仕様書

構文

[22] CSS改行CRLF, CR, LF, FF のいずれかです。空白はそれに加えて HT, SP です。

\0000

[30] >>29 Firefox\000000000000 と解釈します。 chromeU+0000 と解釈します。 WinIE8Opera はその字句の当該 escape 以降を無視します。

[32] Chrome だと >>29cssText\0 とか \1 になってるけど、 >>28 では escape されないでそのまま入ってるっぽい。

\ + 10FFFF より上

[35] 十六進数U+10FFFF よりも大きい時、 GeckoChromeU+FFFD とみなし、 WinIE8U+003F とみなします。 Operahigh surrogateUTF-16 の範囲より先に進めた surrogate pair のようなものとして表現した値 (U-00110000U+DC00 U+DC00) とみなします。

\ + surrogate

[38] Chrome, Firefox, WinIE8, Opera のいずれも、 surrogate pairescape したものをそのまま解釈します。

[39] Chrome, WinIE8, Opera は正しい surrogate pair になっていない surrogate code pointescape したものをそのまま解釈します。 FirefoxU+FFFD と解釈します。

[41] ChromeOpera は、片割れだけ escape された surrogate はそのまま surrogate pair であるものと解釈します。 Firefox は解釈しません (>>42 は青くなり、 escape の方は U+FFFD とみなしています)。

\ + 空白

[1] IDENT 中、 \ の直後に空白:

[2] >>1 WinIE 6\ の後に空白があると、 escape 全体を無視するようです。

\ の後が U+000DU+000A の場合、textarea にいれた時点で U+000D U+000A正規化されてしまうので、 >>1 の方法では検証できないのですが・・・。

>>1U+000D U+000A の例は di (空白) v と解釈されているようです。

\ + NULL

[3] IDENT 中の \ の後に U+0000:

[4] >>3 WinIE 6 では textarea に入れた時点 (or もっと前) で U+0000 以下が捨てられてるみたいです。。。

[33] >>3 WinIE8Opera>>4 と同じでよくわかりません。 Chrome非妥当とみなします。 FirefoxU+0000 と解釈します。

その他

[5] WinIE 6 では \ の後に数字空白以外があるときは \ を捨てるみたいです。

[27] te\sttest と同じ意味の識別子です。

[28] B&W? は直接識別子として書き表せませんが、 B\&W\?B\26 W\3F のように表すことはできます。

[43] SSEを使ってHTMLエスケープを高速化してみた - k0kubun's blog () <http://k0kubun.hatenablog.com/entry/hescape>

[44] Big Sky :: SSE を使わなくても HTML エスケープはある程度速くできる。 () <http://mattn.kaoriya.net/software/lang/c/20160817011915.htm>

[45] [cssom] Serialize U+0000 in string as U+FFFD, NOT escaped as code point (zcorpan著, ) <https://github.com/w3c/csswg-drafts/commit/f8b1bcccbd543fae5eebc04730a7e647c197fa2e>