Rumah >pangkalan data >tutorial mysql >Mengapa Watak Parsi Saya Dipaparkan dengan Tidak Betul dalam Laman Web Codeigniter Saya, Walaupun Menggunakan Pengekodan UTF-8?

Mengapa Watak Parsi Saya Dipaparkan dengan Tidak Betul dalam Laman Web Codeigniter Saya, Walaupun Menggunakan Pengekodan UTF-8?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-13 12:46:11211semak imbas

Why Are My Persian Characters Displaying Incorrectly in My New Codeigniter Website, Despite Using UTF-8 Encoding?

Pengekodan Aksara Pelik Data Tersimpan: Skrip Lama Nampak Baik, Skrip Baharu Tidak

Seorang pembangun menghadapi isu pelik semasa menulis semula tapak web lama dalam bahasa Parsi, yang menggunakan aksara Perso/Arab. Masalahnya melibatkan percanggahan dalam pengekodan aksara semasa menyimpan dan mengambil data daripada pangkalan data.

Konfigurasi Pangkalan Data dan Pengekodan Aksara

Skrip sebelumnya menggunakan enjin pangkalan data yang dipanggil TUBADBENGINE untuk mengurus data yang disimpan dengan pengekodan aksara "utf8_persian_ci." Skrip baharu, yang dikodkan dengan Codeigniter, juga mempunyai "utf8" dan "utf8_persian_ci" sebagai set aksara dan tetapan penyusunannya.

Penukaran Aksara Tidak Diinginkan

Walau bagaimanapun, setelah memasukkan aksara Parsi ke dalam pangkalan data dengan skrip lama, ia dipaparkan secara berbeza dalam skrip baharu. Skrip lama dengan betul memaparkan aksara seperti yang dimaksudkan, tetapi yang baharu mempamerkan gambaran yang pelik.

Menggali lebih dalam, didapati bahawa data yang disimpan dalam pangkalan data adalah dalam format yang kelihatan salah. Memasukkan aksara Parsi "aaaaa" menyebabkan "عمراÙ" disimpan.

Apabila mengambil data ini dalam skrip baharu, ia dipaparkan sebagai "عمراÙ." Walau bagaimanapun, skrip lama masih memaparkannya dengan betul sebagai "aaaaa."

Menyiasat Punca

Punca isu ditemui selepas analisis lanjut: sambungan pangkalan data yang digunakan dalam skrip lama telah tersilap ditetapkan untuk menggunakan pengekodan aksara latin1, walaupun pangkalan data dan jadual dikonfigurasikan dengan utf8_persian_ci.

Ini mengakibatkan proses berikut:

  1. Skrip baharu menghantar aksara Parsi dalam format UTF-8 melalui sambungan pangkalan data berkod latin1.
  2. Pangkalan data menerima dan menyimpan aksara mengikut pengekodan latin1 , yang mengakibatkan perwakilan hancur.
  3. Apabila skrip baharu mengambil data, ia mentafsirkan aksara latin1 yang dikodkan sebagai UTF-8, memburukkan lagi isu.

Penyelesaian

Untuk menyelesaikan masalah ini, data dalam pangkalan data perlu ditukar kepada pengekodan aksara yang betul. Pertanyaan berikut telah digunakan untuk penukaran ini:

SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name

Selepas menukar data, skrip baharu boleh memaparkan aksara Parsi dengan betul.

Atas ialah kandungan terperinci Mengapa Watak Parsi Saya Dipaparkan dengan Tidak Betul dalam Laman Web Codeigniter Saya, Walaupun Menggunakan Pengekodan UTF-8?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn