Pengode dan pendekode entitas HTML

Enkode atau dekode entitas HTML seperti browser, plus escape JS dan CSS.

Direction

Escapes for code

JavaScript string

<p class=\"note\">Caf\u00E9 & cr\u00E8me \u2014 \"5 > 3\" isn\'t news. Gi\u00E1: 25.000 \u20AB \u{1F600}</p>

JavaScript (ES5, surrogate pairs)

<p class=\"note\">Caf\u00E9 & cr\u00E8me \u2014 \"5 > 3\" isn\'t news. Gi\u00E1: 25.000 \u20AB \uD83D\uDE00</p>

CSS content string

<p class=\22note\22>Caf\E9 & cr\E8me \2014 \22 5 > 3\22 isn\27t news. Gi\E1: 25.000 \20AB \1F600</p>

Apa yang dilakukan

Enkode mengubah teks menjadi referensi karakter HTML: hanya lima karakter khusus (& < > " '), ditambah semua karakter non-ASCII, atau semuanya. Referensi bisa ditulis dengan nama (&eacute;), desimal (&#233;) atau heksadesimal (&#xE9;). Dekode memakai tabel lengkap 2.125 nama HTML5 dan aturan yang sama dengan browser, termasuk untuk nilai atribut. Di bawahnya ditampilkan escape yang setara untuk string JavaScript dan untuk content di CSS.

Kapan diperlukan

Di halaman UTF-8 semua karakter bisa ditulis langsung. Yang selalu harus di-escape adalah & dan < di teks, serta tanda kutip atribut di dalam nilainya. 106 nama warisan HTML 4 berlaku tanpa titik koma, kecuali di atribut sebelum = atau huruf atau angka, sehingga URL seperti ?a=1&copy=2 tetap utuh.

Escape bukan sanitasi

Meng-escape karakter khusus melindungi teks halaman dan atribut berkutip dari XSS, tetapi tidak di dalam <script>, style, penangan event, atau URL. Di kode aplikasi, andalkan escape otomatis dari template engine Anda; alat ini untuk memeriksa, men-debug, dan konten sekali pakai.

Pertanyaan yang sering diajukan

Perlukah &eacute; di halaman UTF-8?

Tidak. Hanya &, <, > dan tanda kutip atribut yang perlu di-escape.

Mengapa &copy=2 tidak berubah di atribut?

Di nilai atribut, nama warisan tanpa titik koma tidak didekode sebelum = atau huruf atau angka, agar URL tidak rusak.

Apakah escape HTML mencegah XSS?

Untuk teks dan atribut berkutip, ya; untuk skrip, gaya, event dan URL perlu aturan lain.