-">
🧰 BirAraçtaTüm Araçlar →
Teknik rehber Yayın: 18 Temmuz 2026 7 dk okuma

Türkçe Karakterleri URL İçin Temizleme Kuralları

Sitenizin adresinde %C5%9F veya %C4%B0 gibi tuhaf kodlar gördünüz mü? Bu, temizlenmemiş bir Türkçe karakterin tarayıcı tarafından otomatik kodlanmasıdır. Bu rehberde ç, ğ, ı, ö, ş, ü ve İ harflerinin URL için nasıl doğru biçimde ASCII'ye çevrileceğini, en sık yapılan hataları ve kod örneğini adım adım anlatıyoruz.

Türkçe karakterler URL'de neden sorun çıkarır?

Kısa cevap URL standardı (RFC 3986) yalnızca temel Latin harfleri, rakamları ve birkaç sembolü doğrudan destekler. ç, ğ, ı, ö, ş, ü ve İ bu kümenin dışındadır; temizlenmezlerse tarayıcı onları otomatik olarak percent-encoding'e (%XX) çevirir. Doğru yaklaşım, bu karakterleri önceden en yakın ASCII karşılığına (ç→c, ğ→g, ı→i, ö→o, ş→s, ü→u, İ→i) çevirmektir.

Bu dönüşümü elle yapmak yerine slug oluşturucu aracını kullanarak herhangi bir Türkçe başlığı anında temizleyebilirsiniz. Ancak arka planda ne olduğunu bilmek, özellikle kendi CMS'inizde veya kodunuzda slug ürettiğinizde hataları önler.

Tam dönüşüm tablosu: 7 Türkçe karakter → ASCII

Aşağıdaki tablo, büyük ve küçük harf ayrımını da göstererek tam eşlemeyi listeler:

Türkçe karakter → ASCII dönüşüm tablosu (büyük/küçük harf dahil)
Türkçe karakterASCII karşılığıÖrnek kelime
çcçınar → cinar
ÇcÇorum → corum
ğgöğün → ogun
ĞgAğrı → agri
ıiışık → isik
öogözlük → gozluk
ÖoÖdemiş → odemis
şsşeker → seker
ŞsŞirin → sirin
üuüzüm → uzum
ÜuÜnye → unye
İ (noktalı büyük İ)iİzmir → izmir
I (noktasız büyük I)iIĞDIR → igdir

Kaynak: Türk Dil Kurumu Türkçe alfabesi + Unicode karakter tablosu.

Türkçe karakter temizlenmezse ne olur?

Kısa cevap Temizlenmemiş bir Türkçe karakter, tarayıcı tarafından UTF-8 baytlarına ayrıştırılıp yüzde işaretiyle kodlanır. Türkçe harfler UTF-8'de 2 bayt tuttuğundan tek bir harf, 6 karakterlik bir koda çıkar — örneğin ş harfi %C5%9F olur.
Temizlenmemiş başlık → tarayıcının ürettiği çirkin URL (örnek)
BaşlıkSonuç
Temizlenmemiş (tarayıcının otomatik encode'u)%C4%B0stanbul'da-Gezilecek-Yerler!
Doğru temizlenmiş slugistanbulda-gezilecek-yerler

Başlık: "İstanbul'da Gezilecek Yerler!" — iki sonucu doğrudan aracı deneyerek de karşılaştırabilirsiniz.

Neden 6 karaktere çıkıyor? Tarayıcılar URL'lerde UTF-8 kodlamasını kullanır. "ş" harfi UTF-8'de iki bayt tutar (0xC5 0x9F); her bayt ayrı bir %XX grubuna dönüştüğü için tek bir Türkçe harf altı karakterlik bir koda çıkar. Bu, hem URL'yi uzatır hem de okunmasını imkânsız hale getirir.

Adım adım temizleme kuralları

Doğru bir Türkçe karakter temizleme işlemi, sırasıyla şu adımları izler:

  1. Karakter eşleme tablosunu uygula: ç,ğ,ı,ö,ş,ü,İ,I karakterlerini yukarıdaki sabit tabloya göre ASCII'ye çevir.
  2. Unicode NFD normalizasyonu ile güvenlik ağı ekle: İspanyolca, Fransızca, Almanca gibi diğer dillerden gelen aksanlı harfleri (é, ñ, ä) de yakalamak için metni NFD (Canonical Decomposition) ile ayrıştırıp kalan aksan işaretlerini kaldır.
  3. Küçük harfe çevir: Tüm metni küçük harfe indir.
  4. Boşlukları ayırıcıyla değiştir: Boşluk ve kalan özel karakterleri seçilen ayırıcıyla (genelde tire) değiştir.
  5. Kalan özel karakterleri temizle: Nokta, virgül, parantez, ünlem, emoji gibi alfasayısal olmayan her şeyi kaldır.
  6. Ardışık ayırıcıları teke indir: "--" gibi art arda gelen tireleri tek tireye indir.
  7. Baş ve son ayırıcıları kırp: Slug'ın başında veya sonunda kalan tireyi temizle.
NFD normalizasyonu nedir? Unicode'da bazı harfler tek bir kod noktası (é) olarak, bazıları ise temel harf + ayrı aksan işareti (e + ´) olarak temsil edilebilir. NFD (Normalization Form Canonical Decomposition), bir metni her zaman "temel harf + aksan işareti" biçimine ayrıştırır; bu sayede aksan işaretlerini ayrı bir adımda silmek mümkün olur. Türkçe karakterler için özel eşleme tablosu kullanıldığından bu adım asıl olarak diğer dillerden gelen karakterler için bir güvenlik ağıdır.

Yaygın temizleme hataları

Kısa cevap En sık yapılan hata, standart toLowerCase() fonksiyonuna güvenip Türkçe İ/I harflerini yanlış eşlemektir. Bunun dışında NFD normalizasyonunu atlamak, ardışık tireleri temizlememek ve kelimeyi bir sınırlama uygularken ortadan kesmek de sık görülen hatalardır.
İ / I büyük-küçük harf tuzağı Türkçede noktalı büyük İ küçültülünce i olur; noktasız büyük I ise küçültülünce ı olur. Ama JavaScript'in standart "İ".toLowerCase() çağrısı — yerel ayar (locale) belirtilmediği sürece — beklenmedik bir sonuç üretebilir (birleşik nokta işaretli "i̇" gibi). Bu yüzden güvenilir bir slugify motoru, İ ve I harflerini locale'den bağımsız, sabit bir eşleme tablosuyla ayrı ayrı ele almalıdır — toLowerCase()'a bırakmamalıdır.
  • Yalnızca küçük harfe çevirip Türkçe karakteri bırakmak: Tarayıcı bunları kendi başına percent-encoding'e çevirir.
  • İ/I harflerini toLowerCase()'a bırakmak: Locale'e bağlı, tutarsız sonuçlar üretebilir.
  • NFD normalizasyonunu atlamak: Türkçe dışı dillerdeki aksanlı harfler (é, ñ, ä) gözden kaçar.
  • Ardışık ayırıcıları temizlememek: "İstanbul -- Ankara" gibi girişlerden çift tire (--) sızabilir.
  • Kelimeyi ortadan kesmek: Maksimum uzunluk uygularken kelime sınırını değil karakter sayısını esas almak, "kahve-makinesi" yerine "kahve-makine" gibi kırık sonuçlar üretir.

Türkçe başlığını hemen temizle

Tüm bu adımları elle uygulamana gerek yok — başlığını yapıştır, temiz slug'ı anında al.

Slug Oluşturucuyu Aç →

Kod örneğiyle: JavaScript'te Türkçe karakter temizleme

Yukarıdaki tüm adımları uygulayan, tarayıcıda çalışan basitleştirilmiş bir JavaScript örneği aşağıdadır. Bu, bu aracın kullandığı motorun sadeleştirilmiş halidir:

const CHAR_MAP = {
  'ç':'c','Ç':'c','ğ':'g','Ğ':'g',
  'ı':'i','İ':'i','I':'i',
  'ö':'o','Ö':'o','ş':'s','Ş':'s',
  'ü':'u','Ü':'u'
};

function slugify(text) {
  let s = String(text).replace(/[çÇğĞıİIöÖşŞüÜ]/g, ch => CHAR_MAP[ch]);
  s = s.normalize('NFD').replace(/[̀-ͯ]/g, ''); // güvenlik ağı
  s = s.toLowerCase();
  s = s.replace(/[^a-z0-9]+/g, '-');   // boşluk/özel karakter -> tire
  s = s.replace(/-+/g, '-');            // ardışık tireleri indir
  s = s.replace(/^-|-$/g, '');          // baş/son tireyi kırp
  return s;
}

slugify("İstanbul'da Gezilecek Yerler!");
// -> "istanbulda-gezilecek-yerler"

Bu kod, önce sabit eşleme tablosunu uygular (İ/I tuzağını önler), sonra NFD normalizasyonunu diğer diller için güvenlik ağı olarak kullanır.

Sık sorulan sorular

Türkçe karakterler URL için nasıl temizlenir?
Türkçe karakterler önce en yakın ASCII karşılığına çevrilir: ç→c, ğ→g, ı→i, ö→o, ş→s, ü→u, İ→i. Ardından metin küçük harfe çevrilir, boşluklar ayırıcıyla değiştirilir, kalan özel karakterler temizlenir ve ardışık ayırıcılar tek karaktere indirilir.
Türkçe karakter temizlenmezse ne olur?
Temizlenmezse tarayıcı ve sunucular karakterleri otomatik olarak percent-encoding'e (%XX) çevirir. Örneğin "ş" harfi UTF-8'de 2 bayt tuttuğu için %C5%9F gibi 6 karakterlik çirkin bir koda dönüşür; URL hem okunmaz hem de bazı sistemlerde paylaşımda bozulma riski taşır.
Büyük İ ile büyük I arasındaki fark URL temizlemede neden önemli?
Türkçede noktalı İ küçültülünce "i", noktasız I küçültülünce "ı" olur; ama standart toLowerCase() fonksiyonları bu ayrımı yapmaz ve hatalı sonuç üretebilir. Doğru bir slugify aracı bu iki harfi ayrı ayrı, sabit bir eşleme tablosuyla ele almalıdır.
NFD normalizasyonu nedir, neden gerekir?
NFD (Normalization Form Canonical Decomposition), aksanlı bir harfi temel harf ve ayrı bir aksan işaretine ayıran Unicode normalizasyon biçimidir. Türkçe dışı dillerden gelen (é, ñ, ä gibi) harfleri yakalamak için bir güvenlik ağı olarak kullanılır.
Türkçe karakter temizlemede en sık yapılan hata nedir?
En sık hata, yalnızca metni küçük harfe çevirip Türkçe karakterleri olduğu gibi bırakmaktır. Bu durumda tarayıcı karakterleri kendi başına percent-encoding'e çevirir ve sonuç hem çirkin hem tutarsız bir URL olur.

İlgili rehberler

Metodoloji & kaynaklar. Bu yazıdaki dönüşüm tablosu ve kod örneği, aracın kendi açık slugify motoruyla (Türkçe karakter eşleme tablosu + Unicode NFD normalizasyonu) doğrulanmıştır. Kaynaklar: Unicode Standardı (NFD normalizasyon) · RFC 3629 (UTF-8) · RFC 3986 (URI) · Türk Dil Kurumu Türkçe alfabesi · MDN Web Docs (String.normalize). Son güncelleme: 18 Temmuz 2026. Yazı bilgilendirme ve geliştirme amaçlıdır.
Kaynaklar: Unicode Standardı · RFC 3629 · RFC 3986 · MDN Web Docs · Güncelleme: 18 Temmuz 2026
Tüm işlemler tarayıcınızda çalışır, veri sunucuya gönderilmez. · SlugÜret — BirAraçta