
Sitenizde "Ürünlerimiz" yazması gerekirken "Ürünlerimiz" görünüyor. Ya da veritabanına kaydedilen Türkçe metinler soru işaretine dönüşüyor. Bazen site düzgün ama panelde bozuk, bazen tam tersi.
Bu, hosting ortamında en can sıkıcı sorunlardan biridir çünkü nedeni tek bir yerde değildir. Bu yazı, kodlama zincirini ve kalıcı çözümü anlatıyor.
Kodlama Zinciri
Bir metnin ekranda doğru görünmesi için zincirdeki her halkanın aynı kodlamayı kullanması gerekir:
| Halka | Nerede tanımlanır |
|---|---|
| Dosya kodlaması | Kod düzenleyicinizin kayıt ayarı |
| Sunucu yanıt başlığı | Web sunucusu veya uygulama |
| HTML meta etiketi | Sayfanın head bölümü |
| Veritabanı ve tablo kodlaması | Veritabanı tanımı |
| Veritabanı bağlantı kodlaması | Uygulama bağlantı ayarı |
| Form gönderim kodlaması | Form etiketi ve tarayıcı |
Bozulma, bu halkalardan herhangi birinin farklı olması durumunda ortaya çıkar. Ve genellikle en az bakılan halka suçludur: veritabanı bağlantı kodlaması.
Bozulma Türünden Teşhis
Bozulmanın görünümü, sorunun nerede olduğunu söyler:
- Tek karakter yerine iki tuhaf karakter. Doğru kodlanmış metin, yanlış kodlamayla yorumlanıyor. Genellikle görüntüleme tarafında sorun var.
- Soru işareti veya boş kutu. Karakter hedef kodlamada karşılığı olmadığı için kaybolmuş. Veri gerçekten bozulmuş demektir.
- Sitede doğru, veritabanında bozuk. Bağlantı kodlaması ile tablo kodlaması uyuşmuyor.
- Eski kayıtlar bozuk, yeniler doğru. Bir noktada ayar düzeltilmiş ama eski veri düzeltilmemiş.
İkinci madde önemli bir ayrımdır: burada veri geri döndürülemez biçimde kaybolmuştur. İlk maddede ise veri sağlamdır, yalnızca yanlış yorumlanmaktadır — bu düzeltilebilir.
Doğru Yapılandırma
Kalıcı çözüm, zincirin tamamını aynı kodlamaya ayarlamaktır. Modern standart nettir: her yerde UTF-8 kullanın.
- Dosyalarınızı UTF-8 olarak kaydedin. Kod düzenleyicinizin kayıt ayarını kontrol edin.
- BOM olmadan kaydedin. Bu görünmez karakter, sayfanın başında beklenmedik boşluk ve başlık hatalarına yol açar.
- HTML meta etiketini ekleyin. Sayfanın head bölümünde, mümkün olduğunca üstte.
- Sunucu başlığını tanımlayın. Yapılandırma dosyanızda varsayılan kodlamayı belirtin.
- Veritabanını ve tabloları UTF-8 tanımlayın. Türkçe için tam kapsamlı bir karakter kümesi seçin.
- Bağlantıyı UTF-8'e ayarlayın. En sık atlanan adım budur.
İkinci madde şaşırtıcı sorunlar üretir: BOM işareti, PHP dosyalarının başında bulunduğunda çıktıya karışır ve "headers already sent" hatasına veya sayfa başında açıklanamayan boşluğa neden olur.
Bağlantı Kodlaması: En Sık Suçlu
Veritabanı tablolarınız UTF-8 olsa bile, uygulama bağlantısı farklı bir kodlama kullanıyorsa veri yazılırken dönüştürülür.
Belirtisi tipiktir: veri veritabanına bozuk yazılır ama sitede doğru görünür. Çünkü aynı yanlış dönüşüm okurken tersine uygulanır ve hata gizlenir.
Sorun, veriye başka bir yoldan erişildiğinde ortaya çıkar — veritabanı yönetim aracından, bir rapor çıktısından veya farklı bir uygulamadan. O zaman gerçek bozulma görünür.
Bu yüzden bağlantı kodlaması, uygulama yapılandırmasında açıkça belirtilmelidir. Varsayılana bırakmak, sunucu değiştiğinde sorunun aniden ortaya çıkmasına yol açar.
Taşımadan Sonra Ortaya Çıkanlar
Kodlama sorunları en çok site taşıma sonrası fark edilir. Nedeni, eski ve yeni sunucunun varsayılan ayarlarının farklı olmasıdır.
Taşırken dikkat edilecekler:
- Veritabanı yedeğini alırken kodlamayı açıkça belirtin
- Yedek dosyasının kendisinin doğru kodlandığını kontrol edin
- Yeni veritabanını doğru kodlamayla oluşturun, sonra içe aktarın
- İçe aktarma sırasında kodlama parametresi verin
- Aktarım sonrası Türkçe karakter içeren kayıtları kontrol edin
Üçüncü madde sıralamayı vurgular: boş veritabanı önce doğru kodlamayla oluşturulmalı, ardından veri aktarılmalıdır. Ters sıra, aktarım sırasında dönüşüm hatalarına yol açar.
Bozulmuş Veriyi Düzeltmek
Veri zaten bozuksa, düzeltme mümkündür ama dikkat gerektirir:
- Önce tam yedek alın. Düzeltme denemeleri durumu kötüleştirebilir.
- Bozulma türünü belirleyin. Çift dönüşüm mü, kayıp karakter mi?
- Küçük bir örnek üzerinde test edin. Tüm tabloya uygulamadan önce.
- Ayarları önce düzeltin. Yoksa düzeltilen veri tekrar bozulur.
- Sonucu doğrulayın. Farklı araçlardan kontrol edin.
Dördüncü madde sıralama açısından kritiktir: yapılandırmayı düzeltmeden veriyi düzeltmek anlamsızdır — aynı sorun hemen tekrar üretilir.
Kayıp karakter durumunda ise düzeltme mümkün olmayabilir. Soru işaretine dönüşmüş bir karakter, hangi harf olduğu bilgisini taşımaz. Bu durumda tek çözüm eski bir yedekten veri kurtarmaktır.
Yeni Kurulumda Önleme
Yeni bir site kurarken kodlama sorunlarını baştan engellemek kolaydır:
- Veritabanını oluştururken kodlamayı açıkça belirtin
- Uygulama yapılandırmasında bağlantı kodlamasını yazın
- Şablonlarınıza meta etiketini ekleyin
- Kod düzenleyicinizin varsayılan kayıt ayarını UTF-8 yapın
- İlk günden Türkçe karakter içeren bir test kaydı oluşturup kontrol edin
Son madde en pratik alışkanlıktır: kurulumun ilk gününde Türkçe karakterli bir kayıt oluşturup hem sitede hem veritabanında doğru göründüğünü doğrulayın. Hosting hesabınızda varsayılanların ne olduğunu bilmek yerine, bunu bir kez test etmek yıllarca sorun yaşamanızı engeller.
Sonuç
Karakter bozulması tek bir ayardan değil, zincirin kırık bir halkasından kaynaklanır — ve en sık suçlu veritabanı bağlantı kodlamasıdır. Bu ayarın belirtisi aldatıcıdır: veri veritabanına bozuk yazılır ama sitede doğru görünür, çünkü aynı yanlış dönüşüm okurken tersine uygulanır. Çözüm, zincirin tamamını UTF-8'e ayarlamaktır. Ve düzeltme sırasını atlamayın: önce yapılandırmayı düzeltin, sonra veriyi — aksi hâlde düzelttiğiniz veri hemen tekrar bozulur.
Sıkça Sorulan Sorular (SSS)
Türkçe karakterler neden bozuk görünüyor?
Kodlama zincirindeki halkalardan biri farklı bir kodlama kullanıyor. Dosya kaydı, sunucu başlığı, HTML meta etiketi, veritabanı tanımı ve bağlantı kodlamasının hepsi aynı olmalıdır. En sık atlanan halka veritabanı bağlantı kodlamasıdır.
Sitede doğru ama veritabanında bozuk, neden?
Bağlantı kodlaması ile tablo kodlaması uyuşmuyor. Veri yazılırken yanlış dönüştürülüyor, okunurken aynı yanlış dönüşüm tersine uygulandığı için hata gizleniyor. Veriye başka bir araçla eriştiğinizde gerçek bozulma görünür.
Bozulmuş veri düzeltilebilir mi?
Bozulma türüne bağlı. Tek karakter yerine iki tuhaf karakter görünüyorsa veri sağlamdır ve düzeltilebilir. Soru işareti veya boş kutu görünüyorsa karakter kaybolmuştur ve geri getirilemez — tek çözüm eski bir yedektir.
Site taşıdıktan sonra neden bozuldu?
Eski ve yeni sunucunun varsayılan kodlama ayarları farklı. Taşırken veritabanı yedeğini kodlamayı belirterek alın, yeni veritabanını doğru kodlamayla önce oluşturup sonra içe aktarın ve aktarım sırasında kodlama parametresi verin.