Mengatasi karakter rusak pada formulir PHP dengan UTF-8 dan mbstring


Tanggal publikasi:

Diperbarui:


Artikel teknis > Mengatasi karakter rusak pada formulir PHP dengan UTF-8 dan mbstring

Konteks 2026 dan penggunaan yang aman

Kesimpulan: Simpan satu pengkodean eksplisit - biasanya UTF-8 - di seluruh bentuk HTML, respon HTTP, sumber PHP, penanganan string, dan koneksi basis data. Menangkap masukan mentah dan mengidentifikasi batas dimana bytes diterjemahkan secara tidak benar sebelum mengubah pengaturan global.

Yang akan Anda pelajari

  • Cara membedakan masalah tampilan dari konversi masukan atau korupsi basis data.
  • Tajuk dan pengaturan PHP mana yang relevan dengan aplikasi UTF-8 modern.
  • Mengapa warisan mbstring.internal_encoding dan mbstring.http_input resep di bawah ini tidak boleh disalin ke penyebaran saat ini.

Untuk siapa ini: Kepala PHP menggelapkan mojibake setelah bentuk validasi, mengarahkan kembali, atau melakukan perjalanan keliling database.

Konteks 2026: PHP tidak lagi memberikan instruksi iconv / mbstring lama pengkodean dalam PHP 5.6 yang mendukung default_charset; kode modern harus membuat pengkodean eksplisit di setiap batas. Konfigurasi aslinya hanya untuk menjelaskan insiden sejarah.

Catatan keamanan: Contoh perintah dan konfigurasi dalam artikel asli belum dijalankan ulang dalam lingkungan produksi saat ini. Verifikasi versi yang didukung, cadangan, kendali akses, dan langkah rollback dalam lingkungan tes yang terpisah sebelum menerapkannya.

Sumber resmi utama

Ikhtisar

Teks kacau terjadi ketika berpindah dari layar input ke layar konfirmasi di PHP.

Teks kacau ketika memasukkan teks dalam formulir dan berpindah ke layar konfirmasi.

Teks kacau juga terjadi ketika transisi ke layar sendiri akibat kesalahan pemeriksaan input.

Karena server baru saja dibangun, saya merasa ada sesuatu yang kurang dari konfigurasi PHP, jadi saya akan menjelaskan apa yang saya temukan pada saat itu.


Daftar isi

  1. investigasi (untuk menentukan penyebab sesuatu)
  2. ringkasan

1. investigasi (untuk menentukan penyebab sesuatu)

Informasi berikut ini diselidiki untuk menyelidiki penyebab masalahnya.

1-1. survei

Pertama, periksa pengaturan PHP (php.ini).

php.ini


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

Ini seperti yang dijelaskan di atas dan tampaknya baik-baik saja.

Maka masalahnya tampaknya disebabkan oleh sumber PHP.

Namun, sumber PHP tidak mengidentifikasi kemungkinan masalahnya.

Sekali lagi, saya memeriksa php.ini untuk pengaturan yang mencurigakan dan menemukan satu pengaturan yang mencurigakan.

php.ini


mbstring.http_input = auto

Tidak jelas apakah itu dikodekan dalam UTF-8 karena disetel ke auto, jadi diubah sebagai berikut untuk mencobanya.

php.ini


mbstring.http_input = UTF-8

Berhasil menyelesaikan teks yang kacau.

Pengaturan ini diperlukan untuk modul mbstring ketika menggunakan string multibyte seperti bahasa Jepang di PHP.

Konfigurasi pengkodean permintaan http yang diterima.

2. ringkasan

Jika terjadi teks yang kacau, pertama-tama, cobalah untuk mengatur alur pemrosesan.

Dan jika Anda mengalami karakter yang kacau ketika menggunakan PHP untuk transisi dari layar input ke layar konfirmasi atau transisi layar lainnya, curigai pengaturan berikut di php.ini.

Pengaturan default adalah 'auto', jadi periksalah ini ketika menggunakan mbstring untuk memproses string multibyte.

Semoga penjelasan ini membantu.