PHP formlarındaki bozuk karakterleri UTF-8 ve mbstring ile düzeltme


Yayın tarihi:

Güncelleme:


Teknik makaleler > PHP formlarındaki bozuk karakterleri UTF-8 ve mbstring ile düzeltme

2026 bağlamı ve güvenli kullanım

Sonuç: HTML formu, HTTP yanıtı, PHP kaynağı, dize işleme ve veritabanı bağlantısı genelinde tek bir açık kodlamayı (normalde UTF-8) koruyun. Ham girişi yakalayın ve genel ayarları değiştirmeden önce baytların kodunun yanlış çözüldüğü sınırı belirleyin.

Ne öğreneceksiniz

  • Görüntüleme sorununu giriş dönüştürme veya veritabanı bozulmasından nasıl ayırt edebiliriz?
  • Hangi başlıklar ve PHP ayarları modern UTF-8 uygulamalarıyla ilgilidir.
  • Aşağıdaki eski mbstring.internal_encoding ve mbstring.http_input tarifinin neden mevcut dağıtıma kopyalanmaması gerektiği.

Bu kimin için: PHP bakımcıları form doğrulama, yönlendirmeler veya veritabanı gidiş dönüşlerinden sonra mojibake sorununu giderir.

2026 bağlamı: PHP, PHP 5.6'daki eski iconv/mbstring kodlama yönergelerini default_charset lehine kaldırdı; modern kod, kodlamayı her sınırda açık hale getirmelidir. Orijinal yapılandırma yalnızca tarihsel olayı açıklamak için korunur.

Güvenlik notu: Orijinal makaledeki komutlar ve yapılandırma örnekleri mevcut üretim ortamında yeniden çalıştırılmamıştır. Desteklenen sürümleri, yedeklemeleri, erişim kontrollerini ve geri alma adımlarını uygulamadan önce ayrı bir test ortamında doğrulayın.

Başlıca resmî kaynaklar

Genel bakış

PHP'de giriş ekranından onay ekranına geçerken garip bir metin oluştu.

Forma metin girerken ve onay ekranına geçerken metin bozuk.

Giriş kontrol hataları nedeniyle kendi ekranına geçerken de bozuk metin oluşur.

Sunucu yeni kurulduğu için PHP yapılandırmasında bir şeylerin eksik olduğunu hissettim, bu yüzden o zaman ne bulduğumu anlatacağım.


İçindekiler

  1. soruşturma (bir şeyin nedenini belirlemek için)
  2. özet

1. soruşturma (bir şeyin nedenini belirlemek için)

Sorunun nedenini araştırmak için aşağıdaki bilgiler incelenmiştir.

1-1. anket

İlk olarak PHP ayarlarını (php.ini) kontrol edin.

php.ini


default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On

Yukarıda tarif edildiği gibi ve iyi görünüyor.

O zaman sorun PHP kaynağından kaynaklanıyor gibi görünüyor.

Ancak, PHP kaynağı olası sorunu tanımlamamıştır.

Bir kez daha php.ini dosyasını şüpheli ayarlar için kontrol ettim ve bir şüpheli ayar buldum.

php.ini


mbstring.http_input = auto

Otomatik olarak ayarlandığı için UTF-8 olarak kodlanıp kodlanmadığı belirsizdi, bu yüzden denemek için aşağıdaki gibi değiştirildi.

php.ini


mbstring.http_input = UTF-8

Bozuk metin başarıyla çözüldü.

Bu ayar PHP'de Japonca gibi çok baytlı dizgeler kullanılırken mbstring modülü için gereklidir.

Alınan http isteklerinin kodlamasının yapılandırılması.

2. özet

Bozuk metin oluşursa, önce işlem akışını düzenlemeye çalışın.

PHP'yi giriş ekranından onay ekranına geçişte veya diğer ekran geçişlerinde kullanırken bozuk karakterlerle karşılaşırsanız php.ini dosyasındaki aşağıdaki ayarlardan şüphelenin.

Varsayılan ayar 'auto'dur, bu nedenle çok baytlı dizeleri işlemek için mbstring kullanırken bunu kontrol edin.

Umarız bu açıklama yararlı olmuştur.