Skip to content

Ücretsiz HTML Varlık Kodlayıcı — HTML Escape

HTML varlıklarını kodlayın ve özel karakterleri (< > & " ') çevrimiçi escape edin — ücretsiz, kayıt yok, %100 tarayıcınızda. Adlı, ondalık veya hex çıktı; asla yüklenmez.

Takip Yok Tarayıcıda Çalışır Ücretsiz

Metniniz tarayıcınızda yerel olarak kodlanır ve asla yüklenmez, günlüğe yazılmaz ya da saklanmaz. Bu cihazda kalır.

Seçenekler · Biçim ve kodlama seçenekleri
Varlık biçimi
0 karakter
Kodlanmış HTML
0 karakter
Varlık kodlama spesifikasyon doğruluğu (adlı / ondalık / hex), HTML ve öznitelik bağlamlarında beş özel karakterin tümünün XSS güvenli escape'i, uyumlu ' kesme işareti uzlaşımı, girdinin ağ yok/depolama yok gizliliği ve erişilebilirlik (etiketli denetimler, kodlama ve kopyalamada canlı bölge duyuruları) açısından incelendi. — Go Tools Kodlama Ekibi · Jun 17, 2026

HTML Varlık Kodlaması Nedir?

HTML varlık kodlaması — HTML escape olarak da bilinir — HTML'de özel anlamı olan karakterleri varlık adı verilen güvenli bir metinsel temsille değiştirme işlemidir; böylece tarayıcı bunları işaretleme olarak yorumlamak yerine düz metin olarak görüntüler. En çok önem taşıyan beş karakter, HTML'in bir belgeyi yapılandırmak için kullandığı karakterlerdir: etiketleri açıp kapatan açılı parantezler < ve >, bir varlığı başlatan ve işareti & ve öznitelik değerlerini sınırlayan tırnak işaretleri " ile '. Bunlardan herhangi biri çalıştırılması değil gösterilmesi gereken içerikte göründüğünde escape edilmelidir, yoksa tarayıcı sayfayı yanlış okur — en iyi ihtimalle metniniz yanlış işlenir, en kötü ihtimalle bir saldırgan içeriye bir <script> etiketi sokar.

Bu aracın ne yaptığı konusunda kesin olmak yararlıdır. Metni varlıklara kodlar; bir belge oluşturmaz ya da güzel biçimlemez. Bir kod dizesini bir sayfada düz metin olarak okumak istiyorsanız ya da kullanıcı tarafından sağlanan girdiyi HTML'inize ekleyip etkisizleştirmeniz gerekiyorsa, doğru araç budur. Buna karşılık mevcut işaretlemeyi girintilemek ve düzenlemek istiyorsanız, bu HTML Biçimlendirici'nin işidir; varlıkları tekrar karakterlere dönüştürmek için ise HTML Varlık Çözücü'yü kullanın.

Herhangi bir varlığı yazmanın üç yolu vardır ve bunlar birbirinin yerine geçer. Adlı bir referans, insan dostu bir etiket kullanır (< için <, © için ©); ondalık sayısal bir referans, karakterin Unicode kod noktasını 10 tabanında yazar (< için <); on altılık bir referans ise aynı kod noktasını 16 tabanında yazar (< için <), Unicode standardının U+XXXX gösterimiyle eşleşerek. Adlı varlıklar en iyi okunanlardır ama yalnızca tanımlı adı olan karakterler için vardır; sayısal varlıklar herhangi bir kod noktasını temsil edebilir, bu yüzden güvenli yedektir. Aşağıdaki tablo en sık başvuracağınız varlıkları listeler:

| Character | Named | Decimal | Hex | |-----------|-------|---------|-----| | < | &lt; | &#60; | &#x3C; | | > | &gt; | &#62; | &#x3E; | | & | &amp; | &#38; | &#x26; | | " | &quot; | &#34; | &#x22; | | ' | &#x27; | &#39; | &#x27; | | (space) | &nbsp; | &#160; | &#xA0; | | © | &copy; | &#169; | &#xA9; | | ® | &reg; | &#174; | &#xAE; | | ™ | &trade; | &#8482; | &#x2122; | | € | &euro; | &#8364; | &#x20AC; | | £ | &pound; | &#163; | &#xA3; | | — | &mdash; | &#8212; | &#x2014; | | – | &ndash; | &#8211; | &#x2013; | | … | &hellip; | &#8230; | &#x2026; | | é | &eacute; | &#233; | &#xE9; |

Kesme işaretinin ' yerine ' (ya da ') olarak yazıldığına dikkat edin: adlı ' yalnızca HTML5 ve XML'de standartlaştırıldı ve eski HTML4 ayrıştırıcılarında güvenli değildir, bu yüzden her yerde anlaşılan sayısal biçim uyumlu seçimdir. Bu araç, yaygın olarak kullanılan he kütüphanesiyle aynı uzlaşımı izler; ' için varsayılan çıktının ' olması bu yüzdendir.

Karakter kümesi ile varlık arasındaki ayrımı akılda tutmak önemlidir, çünkü "Tüm ASCII dışını kodla" seçeneğini açıklar. Bir karakter kümesi (UTF-8 gibi) karakterlerin bayt olarak nasıl saklandığını belirler; bir varlık ise bir karakteri yalnızca düz ASCII karakterlerini & # ; ve harfleri ya da rakamları kullanarak yazmanın bir yoludur. Modern bir UTF-8 sayfasında é, — ve 😀 geçerli ham karakterlerdir ve hiç varlığa ihtiyaç duymaz — varsayılan modun bunlara dokunmamasının nedeni budur. Bunları yalnızca metnin ham UTF-8'i işleyemeyen bir sistemden geçmesi gerektiğinde varlıklara zorlarsınız; bu durumda ASCII dışı her kod noktası ASCII güvenli sayısal ya da adlı bir referans olarak yeniden yazılır. Ve tüm bunlar tarayıcınızda çalıştığı için escape ettiğiniz işaretleme — özel bir şablon ya da yayınlanmamış bir taslak bile — ağı hiç geçmez. İlgili dönüşümler için JSON Escape ve Base64 Kodla / Çöz araçları, sırasıyla JavaScript dizeleri ve ikili güvenli taşıma için escape işlemini halleder.

// Server-side templates auto-escape, but when you build HTML by hand you must escape yourself.
// The five reserved characters and their safe entities:
//   <  →  &lt;     >  →  &gt;     &  →  &amp;     "  →  &quot;     '  →  &#x27;

// Node.js — escape untrusted input before inserting it into HTML element content.
function escapeHtml(str) {
  return str
    .replace(/&/g, '&amp;')   // & first, so later entities are not double-escaped
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#x27;'); // numeric form — safe in HTML4, HTML5 and XML
}

const userInput = `<a href="x">Tom & Jerry's</a>`;
const safe = escapeHtml(userInput);
// → &lt;a href=&quot;x&quot;&gt;Tom &amp; Jerry&#x27;s&lt;/a&gt;
document.getElementById('out').innerHTML = `<p>${safe}</p>`; // renders as literal text

// ---------------------------------------------------------------
// In practice, prefer the platform's built-in escaping where it exists:
//   - React / Vue / Angular escape interpolated text by default
//   - Use textContent instead of innerHTML when you only need text:
//       el.textContent = userInput;  // the browser escapes for you
//   - Server frameworks (Jinja, ERB, Blade) auto-escape unless you opt out

Öne Çıkan Özellikler

Beş Ayrılmış Karakteri Doğru Escape Eder

< > & " ' karakterleri, sağlamlaştırılmış bir XSS önleme kütüphanesinin yapacağı gibi tam olarak güvenli varlıklarına dönüştürülür — kesme işareti için HTML4'te güvensiz ' yerine uyumlu ' dahil. Bu, HTML öğe ve öznitelik bağlamlarında güvenilmeyen girdiyi etkisizleştiren tam kümedir.

Adlı, Ondalık ve Hex Çıktı

Aynı karakterleri okunabilir adlı varlıklar (<, ©), ondalık sayısal referanslar (<) ya da on altılık referanslar (<) olarak alın. Tüketen sisteminizin beklediği biçimi seçin; üçü de ayrıştırıldığında özdeş karakterlere çözülür.

İsteğe Bağlı Tüm-ASCII-Dışını-Kodla Modu

Varsayılan olarak yalnızca ayrılmış karakterler escape edilir, aksanlar ve emojiler okunabilir ham UTF-8 olarak kalır. Tek bir kutuyu işaretleyerek 0x7F üzerindeki her kod noktasını eski karakter kümeleri ya da UTF-8'i bozan sistemler için ASCII güvenli bir varlığa dönüştürün.

Canlı, Anlık Kodlama

Çıktı siz yazdıkça güncellenir — gönder düğmesi yok, gidip gelme gecikmesi yok. Büyük bir işaretleme bloğu yapıştırın, escape edilmiş sonuç anında belirir, kopyalamaya hazır.

Yerleşik Varlık Hızlı Başvurusu

En yaygın varlıkların — ayrılmış beşli artı ©, ®, ™, €, —,   ve daha fazlası — adlı, ondalık ve hex biçiminde bir başvuru tablosu sayfada hemen yanı başınızdadır, böylece bir varlığı başka yerde aramanız hiç gerekmez.

Çözücüye Tek Tıkla Geçiş

Yönü değiştir, işlemi tersine çevirmek için doğrudan HTML Varlık Çözücü'ye atlar. Kodlama ve çözme tam terslerdir, dolayısıyla metni kayıpsız döngüleyebilirsiniz.

%100 Gizli, Yalnızca Tarayıcı

Tüm kodlama cihazınızda JavaScript ile gerçekleşir — ağ isteği yok, günlük yok, depolama yok, DevTools → Network'te doğrulanabilir. Özel işaretleme, e-posta şablonları ve yayınlanmamış taslaklar sekmeden hiç ayrılmaz.

15 Dilde Kullanılabilir

Tüm arayüz — etiketler, talimatlar ve rehberlik — 15 dile yerelleştirilmiştir, böylece ekibiniz nerede çalışırsa çalışsın araç ve escape önerileri nettir.

Çözümlü Örnekler

Bir HTML parçacığını escape edin (varsayılan "özel karakterler" modu)

<a href="x">Tom & Jerry's</a>
&lt;a href=&quot;x&quot;&gt;Tom &amp; Jerry&#x27;s&lt;/a&gt;

Varsayılan "özel karakterler" modunda kodlayıcı yalnızca HTML işaretlemesinde anlam taşıyan beş karakteri yeniden yazar: < karakteri < olur, > karakteri > olur, & karakteri & olur, " karakteri " olur ve ' karakteri ' olur. Kesme işareti, adlı ' yerine sayısal ' olarak verilir; çünkü ' HTML4'te tanımlı değildir ve eski ayrıştırıcılar onu sindiremeyebilir, oysa hex biçim her yerde anlaşılır. Kodlamadan sonra tarayıcı dizeyi düz metin olarak işler — <a> etiketi tıklanmaz, görüntülenir — ki bu da işaretlemeyi bir sayfada güvenle göstermenin tam olarak doğru yoludur.

ASCII dışı karakterler varsayılan modda korunur

Visit our café — it's 😀
Visit our café — it&#x27;s 😀

"Özel karakterler" modu yalnızca beş ayrılmış HTML karakterine dokunur, dolayısıyla aksanlı harfler (café), uzun tire (—) ve emoji (😀) değişmeden geçer. Bu, çıktıyı okunabilir ve hafif tutar; zaten <meta charset="utf-8"> bildiren UTF-8 sayfalarında istediğiniz tam olarak budur. "it's" içindeki yalnızca kesme işareti ' olarak escape edilir. Eski bir karakter kümesi için her ASCII dışı karakterin varlığa dönüştürülmesi gerekiyorsa "Tüm ASCII dışı karakterleri kodla" seçeneğini işaretleyin — aşağıdaki örneğe bakın.

Ondalık sayısal varlıklar

<>&"'
&#60;&#62;&#38;&#34;&#39;

Biçimi Ondalık olarak değiştirin; her özel karakter ondalık sayısal karakter referansı olarak yazılır: < karakteri <, > karakteri >, & karakteri &, " karakteri " ve ' karakteri ' olur. Ondalık varlıklar en geniş uyumluluğa sahip sayısal biçimdir — uyumlu her HTML ve XML ayrıştırıcısı bunları anlar — bu da onları tüketen sistemin © gibi adlı varlıkları desteklediğinden emin olamadığınızda güvenli bir tercih yapar.

On altılık sayısal varlıklar

<>&"'
&#x3C;&#x3E;&#x26;&#x22;&#x27;

Hex biçimi her karakteri on altılık sayısal referans olarak yazar: < karakteri <, > karakteri >, & karakteri &, " karakteri " ve ' karakteri ' olur. Hex ve ondalık birbirinin yerine geçebilir — ikisi de aynı Unicode kod noktasına referans verir — ancak hex, Unicode standardında gördüğünüz U+XXXX gösterimine bire bir eşlenir, bu yüzden belirli kod noktalarını belgelerken veya üzerine düşünürken birçok geliştiricinin tercih ettiği biçimdir.

Tüm ASCII dışı karakterleri kodla

café
caf&eacute;  (named)  ·  caf&#233;  (decimal)  ·  caf&#xE9;  (hex)

"Tüm ASCII dışı karakterleri kodla" seçeneğini işaretleyin; 0x7F üzerindeki her kod noktası bir varlığa dönüştürülür, yalnızca beş ayrılmış karakter değil. café içindeki é, seçtiğiniz biçime göre adlı é, ondalık é ya da hex é olur — üçü de aynı karaktere, U+00E9'ye referans verir. Bu mod, Unicode olmayan bir karakter kümesinde sunulan sayfalar için ya da ham UTF-8'i bozan sistemler için kullanılır; her şeyi 7 bit güvenli ASCII varlıklarına zorlamak metnin taşıma sırasında bozulmadan ulaşmasını garanti eder.

HTML Varlık Kodlayıcı Nasıl Kullanılır

  1. 1

    HTML veya metninizi yapıştırın

    Escape etmek istediğiniz işaretlemeyi ya da düz metni giriş kutusuna bırakın. Kodlanmış çıktı siz yazdıkça canlı güncellenir — gönder düğmesi yoktur ve hiçbir yere bir şey gönderilmez.

  2. 2

    Varlık biçimini seçin

    Adlı, okunabilir varsayılandır (<, &, ©). Tüketen bir sistem sayısal referans tercih ettiğinde ya da adlı varlıkların desteklendiğini garanti edemediğinizde Ondalık (<) veya Hex (<) biçimine geçin.

  3. 3

    İsteğe bağlı olarak tüm ASCII dışını kodlayın

    Aksanların ve emojilerin okunabilir ham karakterler olarak kalması için modern UTF-8 sayfalarında bunu kapalı bırakın. Yalnızca metnin eski bir tek baytlık karakter kümesinden geçmesi gerektiğinde işaretleyin; bu, 0x7F üzerindeki her karakteri ASCII güvenli bir varlığa dönüştürür.

  4. 4

    Kodlanmış sonucu kopyalayın

    Escape edilmiş dizeyi panonuza koymak için Kopyala'ya tıklayın; bir şablona, bir belge sayfasına ya da bir veritabanı alanına yapıştırmaya hazırdır. Temizle, bir sonraki parçacık için her iki bölmeyi de sıfırlar.

  5. 5

    Tersi mi gerekiyor? Yönü değiştirin

    Varlıkları temsil ettikleri karakterlere geri dönüştürmek istediğinizde HTML Varlık Çözücü'ye geçmek için Yönü değiştir'i kullanın.

Yaygın HTML Kodlama Hataları

Ve işareti en son escape edildi, çift escape'e yol açtı

< ve > karakterlerini & karakterinden önce değiştirirseniz, az önce oluşturduğunuz varlıkların & karakteri yeniden escape edilir, böylece < karakteri &lt; olur ve düz metin olarak işlenir. Her zaman önce & karakterini escape edin.

✗ Yanlış
replace < and > first, then &  →  &lt;  becomes  &amp;lt;
✓ Doğru
escape & first, then the rest  →  &lt;  stays  &lt;

Eski bağlamlarda kesme işareti için ' kullanıldı

' HTML4'te tanımsızdır ve bazı e-posta istemcileri onu düz olarak gösterir. Eski ya da karışık ortamları hedeflerken her ayrıştırıcının anladığı sayısal ' ya da ' kullanın.

✗ Yanlış
It&apos;s here  →  may render as  It&apos;s here
✓ Doğru
It&#x27;s here  →  renders as  It's here

Veri iki kez kodlandı

Zaten escape edilmiş metni kodlayıcıdan tekrar geçirmek onu çift kodlar: & karakteri &amp; olur ve kullanıcı & yerine & görür. Çıktı zamanında tam olarak bir kez escape edin.

✗ Yanlış
&amp;  encoded again  →  &amp;amp;  shows as  &amp;
✓ Doğru
&amp;  left as-is  →  renders as  &

Bir URL veya JavaScript bağlamı için HTML escape'i kullanıldı

HTML varlıkları bir değeri bir URL ya da satır içi betik içinde güvenli kılmaz. Bir URL'deki boşluk %20 gerektirir, JavaScript'teki bir dize ise JS/JSON escape'i gerektirir. Kodlamayı değerin ulaştığı yere uydurun.

✗ Yanlış
href="/search?q=a&amp;b c"  →  the space still breaks the URL
✓ Doğru
href="/search?q=a%26b%20c"  →  URL-encoded, valid

UTF-8 sayfada gereksiz yere ASCII dışı kodlandı

Modern bir UTF-8 sayfasında café'yi café haline zorlamak kaynağı şişirir ve hiçbir fayda sağlamadan okunabilirliği zayıflatır. Eski bir karakter kümesi gerçekten varlık gerektirmedikçe ASCII dışını ham bırakın.

✗ Yanlış
caf&eacute; on a UTF-8 page  →  needless, harder to read
✓ Doğru
café on a UTF-8 page  →  valid and clean

Bir öznitelik değeri içinde tırnakları escape etmek unutuldu

Bir özniteliğe escape edilmemiş bir " eklemek, değerin dışarı çıkıp yeni öznitelikler enjekte etmesine izin verir — bir XSS vektörü. Öznitelik bağlamında her zaman " (ve ideal olarak ') escape edin; bu araç bunu varsayılan olarak yapar.

✗ Yanlış
title="He said "hi""  →  attribute breaks out
✓ Doğru
title="He said &quot;hi&quot;"  →  contained

Bu Aracı Kimler Kullanır

Bir Web Sayfasında Kod Örnekleri Gösterin
Düz metin HTML göstermesi gereken bir öğretici ya da belge mi yazıyorsunuz? Parçacığı escape edin ki <strong>bold</strong> işlenmek yerine metin olarak görünsün. İşaretlemeyi yapıştırın, escape edilmiş çıktıyı kopyalayın ve bir <pre> ya da <code> bloğunun içine bırakın.
XSS'e Karşı Kullanıcı Girdisini Temizleyin
Kullanıcı tarafından sağlanan herhangi bir dizeyi HTML'inize eklemeden önce beş ayrılmış karakteri escape edin ki <script>…</script> gibi bir yük etkisiz metne dönüşsün. İşaretlemeyi elle oluşturduğunuzda siteler arası betik çalıştırmaya karşı temel savunma budur.
İşaretlemeyi Bir Veritabanı Alanında veya JSON'da Saklayın
Bir HTML parçacığını, aşağı akışta yorumlanmadan düz dize olarak kaydetmeniz mi gerekiyor? Önce kodlayın ki açılı parantezler ve ve işaretleri depolamadan ve yeniden gösterimden sağlam çıksın, sonra dönüş yolunda çözün.
E-posta Şablonları ve CMS İçeriği Yazın
E-posta istemcileri ve içerik yönetim sistemleri ham özel karakterler konusunda affetmezdir. Ayrılmış kümeyi — ve isteğe bağlı olarak tüm ASCII dışını — escape edin ki şablonunuz, karakter kümenizi paylaşmayan istemciler arasında tutarlı işlensin.
Metni Eski Bir Karakter Kümesi İçin Dönüştürün
Ham UTF-8'i işleyemeyen bir sistemi mi hedefliyorsunuz? Her aksanlı harfi, simgeyi ve emojiyi ASCII güvenli bir varlığa yeniden yazmak için "Tüm ASCII dışını kodla" seçeneğini açın; böylece metin 7 bit temiz boru hatlarından sağlam geçer.
XML ve SVG Öznitelik Değerlerini Escape Edin
XML ve satır içi SVG, HTML'in ayrılmış karakterlerini paylaşır. Gömülü işaretleme içeren bir dize, belge yapısını bozmadan bir öznitelik değerine güvenle yerleşsin diye tırnakları ve açılı parantezleri kodlayın.
Bir Varlığı Hızla Arayın
Ticari marka işaretinin ™ mi yoksa ™ mi olduğunu mu unuttunuz? Karakteri yazın, adlı, ondalık ve hex varlığını çıktıdan okuyun ya da sayfadan ayrılmadan yerleşik hızlı başvuru tablosuna bakın.

Kodlayıcı Nasıl Çalışır

Özel Karakterler Modu (Varsayılan)
Varsayılan olarak yalnızca beş HTML-ayrılmış karakter escape edilir — & < > " ' — güvenli çıktı için WHATWG HTML serileştirme kurallarını izleyerek. Diğer karakterler için üretilen varlıkların iki kez escape edilmemesi adına önce & değiştirilir. ASCII dışı dahil tüm diğer karakterler değişmeden geçer.
Kesme İşareti ' Kullanır
HTML4'te tanımsız ve bazı eski ayrıştırıcılarda güvensiz olan adlı ' yerine, tek tırnak sayısal ' (ondalık ') olarak verilir ve U+0027'ye referans verir. Bu, he gibi iyi test edilmiş kütüphanelerin uzlaşımıyla eşleşir ve çıktının HTML4, HTML5 ve XML'de aynı şekilde güvenli olmasını garanti eder.
Adlı, Ondalık ve Hex Kodlama
Biçim seçici her escape edilmiş karakterin nasıl yazıldığını denetler: Adlı, var olan tanımlı etiketleri kullanır (<, ©), Ondalık Unicode kod noktasını 10 tabanında yazar (<) ve Hex onu 16 tabanında yazar (<). Sayısal biçimler adlı biçimlerle aynı kod noktalarına referans verir ve ayrıştırıldığında birbirinin yerine geçer.
Tüm-ASCII-Dışını-Kodla Seçeneği
Etkinleştirildiğinde 0x7F üzerinde kod noktasına sahip her karakter, seçilen biçimde bir varlığa dönüştürülür — café, café (adlı), café (ondalık) ya da café (hex) olur. Emoji gibi astral karakterler tam kod noktalarıyla kodlanır (😀 → 😀). Bu, eski taşıma için 7 bit temiz ASCII çıktısı üretir.
Karakter Kümesi ile Varlıklar Karşılaştırması
Bir karakter kümesi metnin bayt olarak nasıl saklandığını tanımlar; bir varlık ise bir karakteri yalnızca ASCII kullanarak yazmanın bir yoludur. Bir UTF-8 sayfasında ASCII dışı karakterler hiç varlık gerektirmez, bu yüzden varsayılan onları ham bırakır. Her şeyi kodlamak yalnızca çıktının Unicode olmayan bir karakter kümesinden ya da UTF-8'e düşman bir sistemden geçmesi gerektiğinde gereklidir.
Tarayıcıda Yerel, Sıfır Ağ
Kodlama, ana iş parçacığında JavaScript ile eşzamanlı çalışır; API çağrısı, bir sunucuya işçi gidip gelmesi ya da kalıcılık yoktur. Girdi sayfadan hiç ayrılmaz; bunu yazarken boş bir Network panelini izleyerek doğrulayabilirsiniz.

HTML Escape En İyi Uygulamaları

Çıktıda, Doğru Bağlamda Escape Edin
Veriyi aldığınızda değil, HTML'e eklediğiniz anda kodlayın ve kodlamayı bağlama uydurun. HTML varlık kodlaması HTML öğe ve öznitelik içeriği içindir; URL'ler içinde URL kodlaması, betik blokları içinde JavaScript/JSON escape'i kullanın. Yanlış bağlamda escape etmek bir açık bırakır.
Güvenilmeyen Girdiyi Her Zaman Escape Edin
Bir kullanıcıdan, bir yüklemeden ya da harici bir API'den gelen her dize, işaretlemenize girmeden önce escape edilmelidir. Temel XSS savunması budur: <script>alert(1)</script> gibi bir yük, açılı parantezler varlık olunca etkisiz metne dönüşür.
Var Olduğunda Yerleşik Escape'i Tercih Edin
React, Vue ve çoğu sunucu şablon motoru ara değer atanan metni otomatik escape eder; element.textContent atamak da sizin için escape eder. Bu aracı tek seferlik dönüşümler ve çıktıyı anlamak için kullanın — ama uygulama kodunda escape'i elle yazmak yerine çatının otomatik escape'ine yaslanın.
UTF-8 Sayfalarında ASCII Dışını Ham Bırakın
Sayfanız <meta charset="utf-8"> bildiriyorsa aksanları ve emojileri varlıklara kodlamayın — ham UTF-8 daha kısa, daha okunabilir ve aynı ölçüde doğrudur. "Tüm ASCII dışını kodla" seçeneğini gerçekten gerektiren hakiki eski karakter kümesi durumlarına saklayın.
Karışık Bağlamlarda Sayısal Kesme İşaretini Kullanın
Çıktı eski ayrıştırıcılar, XML işlemcileri ya da e-posta istemcileri tarafından tüketilebilecekse, tek tırnak için adlı ' yerine sayısal ' tercih edin. Sayısal biçim her yerde anlaşılır; adlı biçim değil ve işlenen metinde başıboş bir düz metin "'" yaygın, önlenebilir bir hatadır.

Sıkça Sorulan Sorular

Kodladığımda metnim sunucunuza gönderiliyor mu?
Hayır. Her karakter tamamen tarayıcınızda JavaScript ile kodlanır — DevTools → Network'ü açın, yazdığınızda veya yapıştırdığınızda sıfır istek tetiklendiğini göreceksiniz. Hiçbir şey yüklenmez, hiçbir şey günlüğe yazılmaz, hiçbir şey diske kaydedilmez. Bu gizlilik önemlidir, çünkü insanların escape ettiği işaretleme genellikle hassastır: özel bir CMS'ten bir parçacık, dahili bir e-posta şablonu, bir müşteri destek yanıtı ya da henüz yayınlamadığınız bir taslak blog yazısı. Sunucu taraflı bir kodlayıcıda bunların her biri kontrol etmediğiniz bir makineye, ağ üzerinden giderdi; burada metin sekmeden hiç ayrılmaz. HTML'i istemci tarafında escape etmenin, işlediği her şeyin bir kopyasını ilkesel olarak tutabilecek bir web sitesine yapıştırmak yerine tercih edilmesinin bütün nedeni budur.
HTML'i escape etmek ne demektir ve bunu neden yaparım?
HTML'i escape etmek, tarayıcının aksi halde işaretleme olarak yorumlayacağı karakterleri varlık karşılıklarıyla değiştirmek demektir; böylece bunlar işaretleme olarak değil düz metin olarak görüntülenir. Klasik durum, bir sayfada kod göstermektir: ziyaretçinin "bold" sözcüğünü kalın yazıyla görmesi yerine <strong>bold</strong> dizesini okumasını istiyorsanız, açılı parantezleri <strong>bold</strong> olarak escape edersiniz. Diğer ve daha önemli durum güvenliktir: güvenilmeyen kullanıcı girdisini bir sayfaya yerleştirdiğinizde, beş ayrılmış karakteri (< > & " ') escape etmek o girdinin bağlamından çıkıp bir <script> etiketi enjekte etmesini engeller — siteler arası betik çalıştırmaya (XSS) karşı temel savunma budur. Bir kullanıcıdan gelen ve HTML'inize giren her metin önce escape edilmelidir.
Adlı, ondalık ve hex varlıklar arasındaki fark nedir?
Üçü de aynı karakteri üretir; yalnızca referansın nasıl yazıldığı bakımından farklıdırlar. Adlı bir varlık, okunabilir bir etiket kullanır — < için <, & için &, © için © — okuması kolaydır ama yalnızca tanımlı bir adı olan karakterler için çalışır. Ondalık sayısal varlık, Unicode kod noktasını 10 tabanında yazar; < için < ya da é için é gibi. On altılık varlık aynı kod noktasını 16 tabanında yazar; < için < ya da é için é gibi, Unicode standardındaki U+XXXX gösterimini yansıtarak. Adlı varlıklar en okunabilir olanlardır ve yaygın ayrılmış karakterler için doğru varsayılandır; sayısal varlıklar (ondalık veya hex) adı olmayanlar dahil her kod noktasını kodlayabilir, bu da onları belirli bir adlı varlığın desteklendiğini garanti edemediğinizde güvenli seçim yapar.
Kesme işareti neden ' değil de ' olarak kodlanıyor?
Çünkü ' her yerde güvenli değildir. Adlı ' varlığı yalnızca HTML5 ve XML'de tanıtıldı — HTML4'te tanımlı değildir, bu nedenle birkaç eski ayrıştırıcı ve e-posta istemcisi onu kesme işareti yerine "'" düz metni olarak işler. Sayısal referans ' (ya da ondalık ikizi ') tam olarak aynı karaktere, U+0027'ye eşlenir ve yazılmış her uyumlu ayrıştırıcı tarafından anlaşılır. İyi test edilmiş he gibi kütüphanelerin davranışını izleyerek bu araç, çıktının herhangi bir HTML, XML ya da öznitelik bağlamına sürprizsiz bırakılması için kesme işaretinde her yerde uyumlu ' verir.
é, — veya 😀 gibi ASCII dışı karakterleri kodlamam gerekiyor mu?
Genellikle hayır. Sayfanız <meta charset="utf-8"> bildiriyorsa — ki neredeyse her modern sayfa bildirir — aksanlı harfler, uzun tireler ve emojiler ham UTF-8 olarak tamamen geçerlidir ve hiç kodlama gerektirmez. Varsayılan "özel karakterler" modunun bunlara dokunmadan bırakması, çıktınızı kısa ve okunabilir tutması bu yüzdendir. ASCII dışı karakterleri yalnızca metin eski bir tek baytlık karakter kümesinde sunulacak veya saklanacaksa ya da ham UTF-8'i bozan bir sistemden geçecekse kodlamanız gerekir. Bu durumlar için "Tüm ASCII dışı karakterleri kodla" seçeneğini işaretleyin; 0x7F üzerindeki her kod noktası ASCII güvenli bir varlığa dönüştürülür. Şüphede kaldığınızda varsayılanı koruyun ve karakter kümesi bildiriminizin doğru olduğundan emin olun.
HTML'i escape etmek beni XSS saldırılarından korur mu?
Escape etmek XSS savunmasının temelidir, ama bağlama bağlıdır, dolayısıyla dürüst cevap "doğru uygulandığında evet" olur. Güvenilmeyen girdiyi HTML öğe içeriğine yerleştirmeden önce beş ayrılmış karakteri kodlamak, bir saldırganın etiket veya betik enjekte etmesini güvenilir biçimde durdurur — <script>alert(1)</script> gibi bir yük etkisiz metne dönüşür. Uyarı şu ki HTML'in her biri kendi escape kurallarına sahip birkaç bağlamı vardır: bir öznitelik değeri içinde tırnakları escape etmelisiniz (bu araç bunu yapar), bir <script> bloğu ya da satır içi olay işleyicisi içinde bunun yerine JavaScript escape'i gerekir ve bir URL içinde URL kodlaması gerekir. HTML ve öznitelik bağlamları için HTML varlık kodlaması kullanın; URL'ler için URL Kodlayıcı / Çözücü aracına, bir dizeyi JavaScript veya JSON'a gömmek için JSON Escape aracına başvurun. Çıktı zamanında, verinin ulaştığı bağlamda kodlayın.
Bunu nasıl tersine çeviririm — varlıkları tekrar karakterlere dönüştürürüm?
Eşlik eden HTML Varlık Çözücü'yü kullanın. <div> & © gibi varlıklarla dolu bir dizeyi alır ve onu adlı varlıkları, ondalık referansları, on altılık referansları ve hatta sondaki noktalı virgülü olmayan &copy gibi eski sonlandırılmamış varlıkları işleyerek gerçek karakterlere — <div> & © — geri dönüştürür. Kodlama ve çözme, ayrılmış karakterler için tam terslerdir, dolayısıyla metni her iki araçtan kayıpsız geçirebilirsiniz. Bir sayfanın neden < yerine düz metin &lt; gösterdiğini ayıklıyorsanız, varlıkların gerçekte neye çözüldüğünü görmenin en hızlı yolu çözücüdür.
Kodlama görünen metni değiştirir veya düzenimi bozar mı?
Hayır — bütün mesele de bu. Bir varlık, bir karakterin alternatif bir yazılışından ibarettir: bir tarayıcı < karakterini ayrıştırdığında ham karakterle aynı tek bir < glifi işler. Yani doğru escape edilmiş bir sayfa ziyaretçiye ham karakterlerle olduğundan tam olarak aynı görünür; tek fark tarayıcının escape edilmiş sürümü işaretleme yerine metin olarak ele almasıdır. Escape etmenin değiştirdiği tek şey kaynak dizenin uzunluğu ve görünümüdür, bu yüzden yalnızca escape edilmesi gerekeni escape edersiniz. Amacınız escape etmek değil de dağınık işaretlemeyi temizleyip girintilemekse, bu farklı bir iştir — bunun yerine HTML Biçimlendirici'yi kullanın.