HTML Özel Karakter Kodlama ve Çözme
Metni HTML varlıklarına çevirin ya da varlıkları gerçek karakterlere geri döndürün
Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.
Bu araç işinizi gördü mü?
Teşekkürler, geri bildiriminiz alındı.
Nasıl çalışır?
Metni sol panele yapıştırın; sonuç siz yazarken sağ panelde belirir. Kodlama yönü, HTML kaynağına gömüldüğünde sorun çıkaracak karakterleri güvenli yazımlarına çevirir: bir ürün açıklamasındaki "Cin & Tonik" ifadesi "Cin & Tonik" olur ve sayfada yine 've' işaretiyle görünür. Kapsam seçimi ne kadarının dönüşeceğini belirler — gerekli beşli en sık kullanılanıdır ve yalnız yapıyı bozan işaretleri çevirir, tüm ASCII dışı kapsamı Türkçe harflerden simgelere kadar her karakteri çevirir, Türkçe kapsamı ise sayfanızın karakter kodlaması kararsızken işe yarar. Çözme yönü ters işlemi yapar ve üç yazımın hepsini tanır: adlandırılmış (& ü ), onlu (ü) ve onaltılık (ü). Adlandırılmış yazımda HTML’de tanımlı adların tamamı çözülür — Fransızca ç, İspanyolca ñ ve matematik işaretleri dahil. Tanınmayan bir varlık silinmez, olduğu gibi bırakılır ve kaç tanesinin tanınmadığı sonuç satırında yazılır — böylece veri kaybetmeden hangi kısmın elle bakılması gerektiğini görürsünüz. Bu araç etiketlere dokunmaz; bir kaynaktan gelen etiketleri temizlemek istiyorsanız HTML'den Metne Çevirme aracı o işi yapar. Çıktıyı tek tıkla kopyalayabilir veya metin dosyası olarak indirebilirsiniz.
Bu araç html entity kodlama, html escape, html entity decode aramalarıyla da biliniyor.
HTML varlığı (entity) nedir?
HTML varlığı, bir karakteri doğrudan değil, kod içinde başka bir yazımla göstermenin yoludur: & işaretiyle başlar, noktalı virgülle biter ve arada ya bir ad (ü) ya da bir numara (ü) durur. İki sebeple vardır. Birincisi zorunluluktur: küçüktür işareti kaynakta etiket başlangıcı sayıldığı için metin olarak görünmesi isteniyorsa < yazılmak zorundadır. İkincisi kolaylıktır: klavyede olmayan ya da karakter kodlaması bilinmeyen ortamlarda geçen bir işaret (€, —, ½) böyle güvenle yazılır. Varlık yalnızca kaynaktadır; tarayıcı sayfayı çizerken onu gerçek karaktere çevirir.
(bölünmez boşluk) nedir?
adı non-breaking space'ten gelir ve iki özelliğiyle sıradan boşluktan ayrılır. Birincisi satır sonunda bölünmemesidir: '5 kg' ifadesini ile yazarsanız sayı bir satırda, birim öbür satırda kalmaz; aynı sebeple isim ile unvan, tarih ile ay arasında kullanılır. İkincisi sıkıştırılmamasıdır: HTML art arda gelen boşlukları tek boşluğa indirir, ise her biri ayrı ayrı korunur, bu yüzden eski sayfalarda girinti oluşturmak için art arda dizilmiştir. Karakter olarak Unicode'da 160 numaralı yerde durur ve metne yapıştırıldığında gözle ayırt edilemez — kopyalanan metinlerde açıklanamayan hizalama sorunlarının sık sebebidir.
Kaçışlama (escaping) nedir?
Kaçışlama, bir metnin içinde geçen ve bulunduğu bağlamda özel anlam taşıyan işareti, sistemin komut değil veri olarak okuyacağı biçimde yazmaktır. Her bağlamın kendi kuralı vardır: HTML'de küçüktür işareti < olur, adreste boşluk %20 olur, SQL'de tek tırnak ikiye katlanır. Ortak nokta şudur — kaçışlama yapılmazsa sistem metnin bittiğini sanır ve kalanı yapının parçası kabul eder. HTML tarafında bunun iki sonucu olur: iyi ihtimalle sayfa bozuk görünür, kötü ihtimalle kullanıcıdan gelen metin çalışan bir etikete dönüşür. Bu yüzden dışarıdan gelen her metin sayfaya gömülmeden önce kaçışlanır.
HTML kaçışlama, etiket temizleme ve URL kodlama arasındaki fark nedir?
Üçü de metni dönüştürür ama farklı bağlamların kurallarını uygular ve birbirinin yerine geçmez. Bu sayfadaki kaçışlama karakter düzeyinde çalışır: metin aynı kalır, yalnız HTML kaynağında özel anlam taşıyan işaretler güvenli yazımına döner; amaç, metnin sayfada söz olarak görünmesini sağlamaktır. HTML'den Metne Çevirme aracı ise ters yöndedir ve yapı düzeyinde çalışır: etiketleri ve script gövdelerini atar, geriye yalnız okunacak metni bırakır — orada girdi HTML'dir, çıktı düz metindir. URL Kodlama ve Çözme aracının bağlamı büsbütün başkadır: adreste yasak olan karakterleri yüzde işareti ve iki onaltılık basamakla yazar, yani boşluk %20 olur; HTML kaçışlaması bir adresi geçerli yapmaz, yüzde kodlaması da bir metni sayfaya gömülebilir hâle getirmez. Kısa kural: metni sayfaya gömüyorsanız bu sayfa, sayfadan metin çıkarıyorsanız etiket temizleme, adres kuruyorsanız yüzde kodlaması.
Hangi kapsamı seçmeli?
Kapsam yalnız kodlama yönünde iş görür; çözerken bütün varlıklar zaten tanınır. Seçim, çıktının nereye gideceğine göre yapılır:
- Kullanıcıdan gelen bir metni HTML sayfasına gömmek → Gerekli beşli (yapıyı bozan işaretler kapanır, okunurluk bozulmaz)
- Karakter kodlaması bilinmeyen eski bir e-posta şablonu ya da CMS alanı → Tüm ASCII dışı karakterler
- UTF-8 olduğundan emin olduğunuz modern bir sayfa → Gerekli beşli yeter; Türkçe harfleri kodlamak dosyayı gereksiz büyütür
- Yalnız Türkçe harflerin bozuk çıktığı bir çıktı alanı → Yalnız Türkçe karakterler
- XML belgesi hazırlıyorsanız dikkat: XML'de yalnız beş adlandırılmış varlık tanımlıdır, adlandırılmış Türkçe karşılıklar orada çalışmaz
Adlandırılmış mı, sayısal mı yazılır?
Bir karakterin varlık olarak iki yazımı vardır: adlandırılmış (ü) ve sayısal (ü ya da ü). Sayısal yazım her karakter için mümkündür ve her yerde çözülür; adlandırılmış yazım okunurdur ama yalnız listedeki adlar için vardır ve listeyi hangi standardın tanıdığı önemlidir.
Bu araç kodlarken adlandırılmış yazımı ancak HTML 4'ten beri var olan adlar için kullanır, kalanını sayısal yazar. Somut sonucu Türkçede görülür: ç, ö, ü harflerinin adlandırılmış karşılığı vardır (ç ö ü), ğ ve ş harflerininki ise yalnızca HTML5 ile tanımlanmıştır, ı ve İ harflerinin yaygın bir adı hiç yoktur. Bu yüzden ğ, ş, ı ve İ sayısal olarak yazılır — eski bir e-posta istemcisinde bile doğru görünsün diye.
Çözme yönü daha geniştir: HTML5 ile gelen dört Türkçe ad (Ğ ğ Ş ş) da tanınır, çünkü karşınıza çıkan metni siz seçmiyorsunuz. Toplam 254 adlandırılmış varlık ile bütün sayısal yazımlar çözülür.
Word'den yapıştırılan metnin gizli tuzağı: “
Eski masaüstü programlarından ve bazı içerik yönetim sistemlerinden gelen HTML'de 128 ile 159 arasında sayısal varlıklar görürsünüz: “ — ’ gibi. Bu aralık Unicode'da görünmez denetim karakterlerine ayrılmıştır, yani harfi harfine çözülürse ekranda hiçbir şey çıkmaz ya da bozuk kutucuklar belirir.
Gerçekte kastedilen Windows-1252 karakter kümesindeki tipografik işaretlerdir: “ sol çift tırnak, ” sağ çift tırnak, — uzun çizgi, ’ kesme işaretidir. Tarayıcılar bu aralığı sessizce doğru karakterlere eşler; bu araç da aynı eşlemeyi uygular. Sonuç olarak eski bir arşivden gelen metni çözdüğünüzde tırnaklar ve çizgiler kaybolmaz, doğru işaretlere döner.
Çift kodlama: bir metni iki kez kaçışlamak
Kaçışlamanın klasik hatası aynı metni iki kez kodlamaktır. 've' işareti önce & olur; ikinci geçişte bu metnin içindeki & işareti de kodlanır ve &amp; çıkar. Sayfada artık 've' işareti değil, & yazısı görünür.
Bu genellikle şu sırayla olur: bir form değeri kaydedilirken kaçışlanır, sonra şablon motoru çıktıyı ikinci kez kaçışlar. Belirtisi tanıdıktır — sayfada &nbsp; ya da &#231; gibi diziler görünür. Çözümü de basittir: metni bu araçla bir kez çözün, çıktıda hâlâ varlık kalmışsa metin iki kez kodlanmış demektir ve kaynaktaki ikinci kaçışlama kaldırılmalıdır.
Sık sorulanlar
nedir, normal boşluktan farkı ne?
bölünmez boşluktur: genişliği normal boşluk kadardır ama tarayıcı satırı orada bölmez ve art arda yazılan birden fazla birleştirilip tek boşluğa indirilmez. '15 kg' gibi sayı ile birimin ayrılmaması gereken yerlerde ve HTML'de birden çok boşluk göstermek istendiğinde kullanılır.
Türkçe karakterleri kodlamam gerekir mi?
Sayfanız UTF-8 ise gerekmez; ç, ğ, ş harflerini doğrudan yazabilirsiniz ve dosya daha küçük kalır. Kodlama, karakter kümesini denetleyemediğiniz yerlerde işe yarar: eski e-posta şablonları, karakter kodlaması ayarlanamayan yönetim panelleri ve ASCII dışına çıkamayan çıktı alanları.
Bu araç HTML etiketlerini siliyor mu?
Hayır. Kaçışlama karakter düzeyinde çalışır: kodlama yönünde etiketlerin açılı ayraçları da kaçışlanır ve etiket metne dönüşür, çözme yönünde ise etiketler olduğu gibi kalır. Kaynaktaki etiketleri temizleyip düz metin almak istiyorsanız HTML'den Metne Çevirme aracını kullanın.
Tanınmayan bir varlık çıktıda ne olur?
Olduğu gibi bırakılır ve sonuç satırında kaç tanesinin tanınmadığı yazılır. Bunun sebebi veri kaybını önlemektir: tanınmayan diziyi silmek metinden sessizce bir parça atmak, boş bırakmak ise yanlış bir karakter uydurmak olurdu.
Yapıştırdığım metin bir sunucuya gönderiliyor mu?
Hayır. Kodlama ve çözme tamamen tarayıcınızın içinde yapılır; müşteri yazışması, sipariş notu ya da yayına girmemiş bir sayfa metni yapıştırsanız bile veri bu sayfadan çıkmaz.