KeroTools

HTML Varlık Kodlayıcı ve Çözücü

Metni güvenli HTML varlıklarına kodlayın veya geri çözün — geliştiriciler için ücretsiz araç.

Giriş
0 karakter
Çıktı

Metniniz cihazınızda kalır

Sonradan silinecek bir şey yok

Gerçek kullanıcı verisi için güvenli

Her modern tarayıcıda çalışır

Nasıl çalışır

  1. 1

    Metninizi yapıştırın

    İşaretlemenin içine oturması gereken, açılı ayraç, ve işareti, tırnak ya da özel harf içeren bir dizi.

  2. 2

    Bağlamı seçin

    Gövde metni, öznitelik değeri ya da tam kodlama — her biri farklı bir karakter kümesine kaçış uygular.

  3. 3

    Sonucu kopyalayın

    Bir şablona, bir XML belgesine, bir beslemeye ya da bir e-posta gövdesine yapıştırın.

Neden bu araç

Bağlam bir seçim, tahmin değil

Gövde metni, öznitelik değeri ve adres için kaçış farklı işlerdir ve hangisi olduğunu siz seçersiniz.

Çifte kodlama yakalanır

Zaten varlık içeren bir girdi işaretlenir, böylece bir ve işaretini iki kez varlığa çevirmezsiniz.

Adlı ya da sayısal çıktı

Sayısal başvurular XML’de, beslemelerde ve SVG’de çalışır; adlı varlıkların çoğu orada tanımsızdır.

Gidiş dönüşü güvenli çözme

Adlı ve sayısal biçimlerin ikisi de tanınır; onaltılık yazım ve noktalı virgülsüz varlıklar dahil.

Kaçışın ne yaptığı konusunda dürüst

Metni bir bağlama koymayı güvenli kılar; bu, güvenilmez işaretlemeyi güvenli kılmaktan daha küçük bir iddiadır.

Hiçbir şey tarayıcıdan ayrılmaz

Metin bu sayfada dönüştürülür; denemede kullandığınız kayıt içerikleri ve müşteri adları sizde kalır.

Tek bir “HTML için kaçış” yoktur — bağlam karar verir

Konunun geri kalanını anlaşılır kılan fikir budur. Bir tarayıcı belgeyi birkaç farklı durumda ayrıştırır ve mevcut durumu bitirebilecek karakterler her birinde farklıdır. Gövde metninin içinde yalnızca `<` ve `&` yeni bir şey başlatabilir, dolayısıyla kaçış gereken ikisi budur. Çift tırnaklı bir öznitelik değerinin içinde `<` zararsızdır, `"` ise öldürücüdür; çünkü tırnak özniteliği bitirir. Tırnaksız bir öznitelik değerinin içinde onu bir boşluk bitirir; sekme, satır sonu, ters tırnak, eşittir ve büyüktür işareti de öyle. Bir `<script>` bloğunun içinde HTML kaçışı hiçbir işe yaramaz; gereken şey JavaScript metin kaçışıdır. Her yerde uygulanan tek bir `escape()` yardımcısının hem bozuk çıktı hem gerçek açık üretmesinin nedeni budur: karakterlerin güvenli olduğu yerde fazla, olmadığı yerde eksik kaçış uygular. Kodlamadan önce bağlam seçmek bir incelik değil — kararın ta kendisidir.

Değişmesi gereken yalnızca bir avuç karakter var

Listenin ne kadar kısa olduğunu bilmek işe yarar, çünkü aşırı kaçışın çoğu bunu bilmemekten gelir. HTML’de sözdizimsel anlamı olan karakterler `<`, `>`, `&`, `"` ve kesme işaretidir. Bunlardan `&` her zaman kaçış ister, çünkü bir varlık başlatır; `<` her zaman kaçış ister, çünkü bir etiket başlatır. `>` gövde metninde bir zorunluluktan çok nezakettir — tarayıcı çıplak bir `>` işaretini sorunsuz gösterir — gerçi çoğu kod tabanında ona da kaçış uygulamak alışkanlıktır, çünkü bedava gelir ve işaretleme sonradan daha katı bir şeyce işlenirse işe yarar. İki tırnak yalnızca öznitelik değerlerinin içinde, hem de yalnızca sınırlayıcı olarak kullandığınız önemlidir. Geri kalan her şey — her özel harf, her Arapça ya da Çince karakter, her emoji — UTF-8 bir belgede hiç kaçış istemez: kodlama onları zaten hallediyor. `café` sözcüğünü `caf&eacute;` yapmak yasaldır ve neredeyse her zaman anlamsızdır; dosyanızı büyütür ve içinde aramayı zorlaştırır.

Türkçe harfler ve varlık kodlamasının çözmediği sorun

Türkçe yazanların bu araca en sık getirdiği soru şudur: ş, ğ, İ ve ı bozuk görünüyor, bunları varlık olarak kodlamak düzeltir mi? Cevap neredeyse her zaman hayırdır ve nedeni öğreticidir. Bu harflerin bozuk görünmesinin sebebi kaçış eksikliği değil, kodlama uyuşmazlığıdır: belge UTF-8 olarak yazılmış ama tarayıcı ya da e-posta istemcisi onu windows-1254 sanarak okumuştur. Metni `&#351;` ve `&#304;` gibi sayısal başvurulara çevirmek gerçekten de görüntüyü düzeltir, çünkü bu başvurular saf ASCII’dir ve hangi kodlama varsayılırsa varsayılsın hayatta kalır. Ama bu bir tedavi değil, semptomun üstünü örtmektir; sorun devam ediyordur ve gövde metninin dışındaki her yerde geri döner. Ayrıca bedeli vardır: veritabanı araması artık “şirket” sözcüğünü bulamaz, çünkü depolanan şey o harfler değildir; sıralama bozulur ve ekran okuyucu henüz çözülmemiş bir diziyi okuyamaz. Doğru çözüm `<meta charset="utf-8">` bildirmek, sunucunun Content-Type başlığını buna uydurmak ve harfleri olduğu gibi yazmaktır. Bu araç size tam kodlamayı seçenek olarak sunar — eski bir sistem sizi buna zorladığında diye — ama varsayılan davranış olarak değil.

Çifte kodlama, bu aracın önlemek için var olduğu hatadır

Kaçış, yinelemeye kayıtsız bir işlem değildir ve bunu unutmak web’in en tanıdık kusurlarından birini üretir. `&` işaretini bir kez kodlarsanız `&amp;` elde edersiniz. Sonucu tekrar kodlarsanız `&amp;amp;` elde edersiniz ve bu, sayfada birebir `&amp;` metni olarak görünür. Görmüşsünüzdür: “Tom &amp; Jerry” diye okunan sayfa başlıkları, bir sözcüğün ortasında `&#39;` bulunan e-posta konu satırları, arama sonuçlarında `&quot;` ile çevrelenmiş ürün adları. Bunun sebebi, kaçışın birbirinden habersiz iki katmanda uygulanmasıdır — otomatik kaçış yapan bir şablon motoru, artı diziyi teslim etmeden önce ihtiyaten kaçış uygulayan bir denetleyici. Çözüm asla iki kez kaçış uygulamamaktır; emin olmanın yolu ise tam olarak bir kez, mümkün olan en son anda, dizinin işaretlemeye girdiği noktada kaçış uygulamaktır. Bir veritabanında kaçışlı saklanan her şey, sonunda onu işleyen şey tarafından bir kez daha kaçışlanacaktır.

Adlı varlıklar HTML’in özelliğidir, metnin değil

HTML5 iki binden fazla adlı varlık tanımlar; tanıdık `&nbsp;` ve `&copy;` işaretlerinden `&bigotimes;` gibi şeylere kadar. XML tam olarak beş tanesini tanımlar: `&lt;`, `&gt;`, `&amp;`, `&quot;` ve `&apos;`. Bu boşluk belirli ve yaygın bir arızaya yol açar. Bir RSS beslemesine, bir SVG dosyasına, bir XHTML belgesine, bir Android düzenine ya da bir SOAP yüküne `&nbsp;` koyun, ayrıştırma hatası alırsınız; çünkü ayrıştırıcı onu hiç duymamıştır ve XML’de tanımsız bir varlık göz ardı edilmez, öldürücüdür. Sayısal biçim `&#160;` her yerde çalışır, çünkü tanıma ihtiyacı yoktur. Ters yönde eşleşen bir tuzak da vardır: `&apos;` XML’in beşlisindendir ama HTML4’te yoktu, dolayısıyla eski HTML belgeleri ve bazı e-posta istemcileri onu birebir metin olarak gösterir. Bir dizi biçimler arasında yolculuk edebilecekse — modern bir yığındaki dizilerin çoğu eder — güvenli yazım sayısal başvurulardır.

Kaçış temizleme değildir ve fark önemlidir

Bu ikisi sürekli birbirine karıştırılır ve enjeksiyon hataları tam bu karışıklıkta yaşar. Kaçış, metni alır ve onu belirli bir bağlama koymayı güvenli kılar; böylece yorumlanmak yerine gösterilir. Temizleme ise işaretleme olarak kalması istenen işaretlemeyi alır ve tehlikeli kısımlarını çıkarır. Bir yorumu yazdırmadan önce kaçışlamak doğrudur; kullanıcının biçimlendirmesine izin verilen zengin bir metin alanını kaçışlamak biçimlendirmeyi yok eder ve alışılmış tepki — HTML’i kaçışsız geçirmek — asıl deliği açan şeydir. Farkın en keskin örneği bir adrestir: bir bağlantıya varlık kodlaması uygulayın, `javascript:alert(1)` tamamen sağlam kalır; çünkü varlık çözümü adres şeması denetlenmeden önce olur, yani `&#106;avascript:` `javascript:` olur ve çalışır. Hiçbir miktarda HTML kaçışı bir `href` özniteliğini korumaz; yalnızca şemayı doğrulamak korur. Kaçış tam olarak bir sorunu çözer ve hangisi olduğunu bilmek bütün mesele budur.

Kaçınılması gereken yaygın hatalar

  • Her yerde tek bir kaçış işlevi kullanmak. Gövde metni, öznitelik değerleri ve betik blokları farklı karakterlerde biter; tek bir yardımcı bir yerde fazla, başka yerde eksik kaçış uygular.
  • Aynı diziye iki kez kaçış uygulamak. Kaçış yinelemeye kayıtsız değildir — `&` önce `&amp;` sonra `&amp;amp;` olur; sayfa başlıklarının “Tom &amp; Jerry” diye okunmasının nedeni budur.
  • Türkçe harfleri varlık olarak kodlayıp kodlama sorununu çözdüğünü sanmak. Bu semptomu örter; asıl çözüm `<meta charset="utf-8">` ve buna uyan bir Content-Type başlığıdır.
  • XML’e adlı varlık koymak. Orada yalnızca beşi tanımlıdır, dolayısıyla `&nbsp;` bir beslemede, SVG’de ya da XHTML belgesinde öldürücü bir ayrıştırma hatasıdır; `&#160;` her yerde çalışır.
  • Varlık kodlamasının bir adresi güvenli kıldığına güvenmek. Varlıklar şema denetlenmeden çözülür, yani `&#106;avascript:` `javascript:` olur ve çalışır; yalnızca şemayı doğrulamak işe yarar.

Karşılaştırma

ÖlçütBu araçÇevrimiçi kodlayıcılarBir dil kitaplığı
Metin sunucuya gönderilirAslaGenellikle evetHayır
Bağlamı seçmenize izin verirEvetNadirenGenellikle
Çifte kodlama uyarısı verirEvetHayırHayır
XML için sayısal çıktıEvetBazenAyarlanabilir
Tüm HTML5 adlı kümesini çözerEvetKısmenGenellikle
FiyatÜcretsizÜcretsiz / ücretli katmanlarÜcretsiz

Özellikler

Kodlama ve çözme

İki yön de var; bir sistemin ürettiğini denetlemek, göndereceğinizi hazırlamak kadar kolay olsun.

Asgari ya da tam kodlama

Yalnızca bağlamın gerektirdiği karakterlere ya da ASCII dışındaki her karaktere kaçış uygulayın.

Adlı varlık desteği

Çözerken bütün HTML5 adlı kümesi tanınır; neredeyse kimsenin elle yazmadığı uzun kuyruk dahil.

Onaltılık ve onluk

Sayısal başvurular iki yazımda da okunur ve yazılır, çünkü gerçek belgelerde ikisi de bulunur.

Çifte kodlama tespiti

Girdideki mevcut varlıklar, siz onları ikinci kez kodlamadan önce vurgulanır.

Büyük girdiler desteklenir

Bütün bir şablon ya da uzun bir dışa aktarım yükleme ve boyut tavanı olmadan dönüşür.

Kurulacak bir şey yok

Derleme aracı yok, çalışma zamanı yok, bağımlılık yok — web sayfasında çalışır.

Arapça ve RTL hazır

Sekiz dilde tam arayüz, sağdan sola Arapça dahil.

Varsayılan olarak güvenli

HTTPS üzerinden sunulur; içerik takibi ve üçüncü taraf yüklemesi yoktur.

Kimler kullanıyor

Web geliştiricileri

Bir dizinin öznitelik değerine girdikten sonra nasıl davranacağını denetlemek.

E-posta geliştiricileri

Katı ayrıştıran istemciler için konu satırlarını ve gövde metnini hazırlamak.

Teknik yazarlar

Kod örneklerini bir sayfada, tarayıcı onları çalıştırmaya kalkışmadan göstermek.

Bozuk metin ayıklayan herkes

Ortasında `&amp;amp;` ile gelmiş bir diziyi çözmek.

Sıkça Sorulan Sorular

Hayır. Her şey tarayıcınızda yerel çalışır — metniniz asla yüklenmez, saklanmaz veya paylaşılmaz.

Evet — tamamen ücretsiz, hesap ve sınır yok.