hosting

Türkçe Karakterli Dosya Adları: Yükleme ve İndirme Sorunları

Dosya adlarındaki karakter sorunları, güvenli ad kullanma deseni, indirme başlığı ve veritabanı tarafı ayarları. Türkçe Karakterli Dosya Adları: Yükleme ve…

Türkçe Karakterli Dosya Adları: Yükleme ve İndirme Sorunları
İçindekiler
  1. Sorun Nerede Çıkar?
  2. En Basit Çözüm
  3. İndirme Başlığı
  4. Görünmez Fark: Normalizasyon
  5. Ad Temizleme Kuralları
  6. Adres Olarak Sunmak
  7. Veritabanı Tarafı
  8. Kontrol Listesi
  9. Sonuç
  10. Sıkça Sorulan Sorular (SSS)
  11. En sağlam çözüm nedir?
  12. İndirilen dosyanın adı neden bozuk çıkıyor?
  13. Dosya diskte var ama bulunamıyor?
  14. Veritabanında adlar kesiliyor?

Türkçe Karakterli Dosya Adları: Yükleme ve İndirme Sorunları

Kullanıcı "Şubat Raporu — Güncel.pdf" adlı dosyayı yükledi. Sunucuda kaydedildi, listede göründü, ama indirilmek istendiğinde bulunamadı hatası verdi. Dosya orada duruyor — adı yolda bozulmuş.

Bu yazı, dosya adlarındaki karakter sorunlarını ele alıyor.

Sorun Nerede Çıkar?

Dosya adı birçok katmandan geçer:

  • Tarayıcıdan sunucuya gönderim.
  • Sunucuda dosya sistemine yazma.
  • Veritabanına kaydetme.
  • Adres olarak sunma.
  • İndirme başlığında gönderme.

Her katman farklı bir kodlama beklentisi taşır ve zincirin herhangi bir yerinde uyumsuzluk olabilir: dosya adı beş farklı katmandan geçer ve her biri kendi kodlama varsayımıyla çalışır — biri bile uyumsuzsa ad bozulur.

Dördüncü madde ayrıca güvenlik boyutu taşır ve ilerleyen bölümde ele alınıyor.

En Basit Çözüm

Sorunu tamamen ortadan kaldıran bir yaklaşım vardır:

  1. Diskte güvenli bir ad kullanın.
  2. Orijinal adı veritabanında saklayın.
  3. İndirirken orijinal adı sunun.

Bu desen tüm katman sorunlarını çözer: dosya diskte rastgele üretilmiş bir adla durur, kullanıcı ise indirdiğinde kendi verdiği adı görür — dosya sistemi hiç Türkçe karakterle uğraşmaz.

Bu ayrım aynı zamanda çakışmaları da çözer. İki kullanıcı aynı adla dosya yüklediğinde biri diğerinin üzerine yazmaz.

Ayrıca güvenlik kazancı vardır: dosya adı üzerinden yapılan dizin geçişi saldırıları imkânsız hâle gelir.

İndirme Başlığı

Orijinal adı sunarken dikkat gerekir:

Yaklaşım Sonuç
Adı doğrudan yazmak Türkçe karakterler bozulur
Kodlanmış biçim kullanmak Modern tarayıcılarda doğru
İkisini birden vermek En uyumlu

Üçüncü satır standartta tanımlı bir uyumluluk yöntemidir: indirme başlığında hem sadeleştirilmiş bir yedek ad hem kodlanmış gerçek adı birlikte göndermek, eski istemcilerde bozuk ad yerine okunabilir bir yedek görünmesini sağlar.

Modern tarayıcılar kodlanmış olanı, eskiler yedeği kullanır.

Birinci satır ise en sık yapılan hatadır ve kullanıcıya anlamsız karakterlerle dolu bir dosya adı verir.

Görünmez Fark: Normalizasyon

Aynı görünen iki ad farklı olabilir:

  • Harf tek karakter olarak yazılabilir.
  • Veya harf artı işaret olarak.
  • Ekranda ikisi aynı görünür.
  • Bilgisayar için farklıdırlar.

Bu, teşhis edilmesi en zor sorunlardan biridir: bazı işletim sistemleri dosya adlarını otomatik olarak farklı bir biçime dönüştürür — dosyayı o sistemden yükleyip başka bir sistemde ararsanız aynı görünen ad eşleşmez.

Sorun özellikle bir sistemde oluşturulup diğerinde aranan dosyalarda yaşanır.

Çözüm, adları karşılaştırmadan veya kaydetmeden önce tek bir biçime normalleştirmektir.

Bu da diskte güvenli ad kullanma yaklaşımının neden bu kadar değerli olduğunu gösterir; sorun hiç ortaya çıkmaz.

Ad Temizleme Kuralları

Orijinal adı yine de kullanmanız gerekiyorsa:

  1. Dizin ayırıcılarını kaldırın.
  2. Nokta ile başlayan adları engelleyin.
  3. Uzunluğu sınırlayın.
  4. Kontrol karakterlerini atın.
  5. Uzantıyı ayrıca doğrulayın.

Birinci madde temel bir güvenlik önlemidir: dosya adında dizin ayırıcı bırakmak, kullanıcının yükleme klasörünün dışına dosya yazmasına imkân verebilir.

Bu, sunucuda kod çalıştırmaya kadar giden bir açık üretir.

Üçüncü madde ise teknik bir sınırdır. Dosya sistemleri ad uzunluğunu sınırlar ve çok uzun bir ad yazma hatasına yol açar.

Beşinci madde ise ayrı bir konudur ve yalnızca ada bakarak yapılmamalıdır; dosya içeriği de kontrol edilmelidir.

Adres Olarak Sunmak

Durum Etki
Türkçe karakter adreste Kodlanması gerekir
Boşluk adreste Bozuk bağlantı riski
Kopyala-yapıştırda Adres kırılabilir

Üçüncü satır günlük kullanımda sorun çıkarır: Türkçe karakter ve boşluk içeren bir dosya adresi, e-postaya veya mesajlaşma uygulamasına yapıştırıldığında sık sık kırılır ve karşı taraf açamaz.

Bu, teknik olarak doğru çalışan ama pratikte sorun üreten bir durumdur.

Bu yüzden genel erişime açık dosya adreslerinde sade karakterler tercih edilmelidir.

Veritabanı Tarafı

Orijinal adı saklarken:

  • Karakter kümesi tam desteklemeli.
  • Alan uzunluğu yeterli olmalı.
  • Sıralama kuralı doğru seçilmeli.

İkinci madde beklenmedik bir tuzak taşır: Türkçe karakterler tek bayt değil, birden fazla bayt yer kaplar — 50 karakterlik bir alan, Türkçe karakter yoğun bir adda çok daha az karakter alabilir ve ad kesilir.

Alan uzunluğunu karakter cinsinden tanımlamak ve makul bir pay bırakmak gerekir.

Üçüncü madde ise arama ve sıralamayı etkiler. Yanlış sıralama kuralı, Türkçe alfabetik sıralamayı bozar.

Kontrol Listesi

Test Beklenen
Türkçe karakterli dosya yükle Sorunsuz kaydedilmeli
Listede görüntüle Ad doğru görünmeli
İndir Orijinal ad korunmalı
Aynı adla ikinci dosya yükle Üzerine yazmamalı
Çok uzun ad dene Hata vermemeli

Dördüncü satır çok yaşanan bir veri kaybını yakalar: aynı adla ikinci bir dosya yüklendiğinde ilkinin üzerine yazılması, kullanıcının farkına bile varmadan verisini kaybetmesi demektir.

Diskte benzersiz ad kullanmak bu sorunu da otomatik çözer.

Beşinci satır ise sınır durumunu test eder ve genellikle atlanır.

Dosya yükleme sınırları ve karakter ayarları hosting yapılandırmanıza bağlıdır; hosting altyapı çözümleri panelinden PHP ve veritabanı karakter ayarlarını kontrol edebilirsiniz.

Sonuç

Dosya adı sorunlarının kökü şudur: ad beş farklı katmandan geçer ve her biri kendi kodlama varsayımıyla çalışır — biri bile uyumsuzsa ad bozulur. Tek ve kesin çözüm, dosyayı diskte rastgele güvenli bir adla saklayıp orijinal adı veritabanında tutmaktır. Böylece hem kodlama sorunu hem ad çakışması hem dizin geçişi riski birden ortadan kalkar. İndirirken adı hem sadeleştirilmiş hem kodlanmış biçimde gönderin.

Sıkça Sorulan Sorular (SSS)

En sağlam çözüm nedir?

Dosyayı diskte rastgele üretilmiş güvenli bir adla saklamak, orijinal adı ise veritabanında tutmak. Kullanıcı indirdiğinde kendi verdiği adı görür ama dosya sistemi hiç Türkçe karakterle uğraşmaz. Bu aynı zamanda ad çakışmasını ve dizin geçişi saldırılarını da ortadan kaldırır.

İndirilen dosyanın adı neden bozuk çıkıyor?

İndirme başlığında ad doğrudan yazılmış olabilir. Standartta tanımlı uyumluluk yöntemi, hem sadeleştirilmiş bir yedek ad hem kodlanmış gerçek adı birlikte göndermektir — modern tarayıcılar kodlanmışı, eskiler yedeği kullanır.

Dosya diskte var ama bulunamıyor?

Muhtemelen normalizasyon farkı var. Aynı görünen bir harf tek karakter olarak da, harf artı işaret olarak da yazılabilir; ekranda ikisi aynı görünür ama bilgisayar için farklıdırlar. Bazı işletim sistemleri adları otomatik dönüştürür ve bir sistemde oluşturulan ad diğerinde eşleşmez.

Veritabanında adlar kesiliyor?

Türkçe karakterler tek bayt değil, birden fazla bayt yer kaplar. 50 karakterlik bir alan, Türkçe karakter yoğun bir adda çok daha az karakter alabilir. Alan uzunluğunu karakter cinsinden tanımlayın ve makul bir pay bırakın.