Masalah BOM UTF-8 yang harus diwaspadai di Wordpress Saya mengalami masalah sejak awal, yaitu, setelah menginstal plugin tertentu, layar putih akan muncul setelah mengklik untuk mengaktifkan. Saya tidak pernah tahu apa alasannya, dan solusi sebelumnya adalah jika tidak mengandung karakter Cina, langsung transfer file ke kode ASCII, yang umumnya dapat diselesaikan. Ketika saya mendapat blog untuk saudara laki-laki saya hari ini, situasi ini terjadi lagi. Setelah meneliti untuk waktu yang lama, saya akhirnya menemukan jawabannya.
Ada konsep BOM dalam spesifikasi Unicode. BOM - Tanda Pesanan Byte, yang merupakan tanda pesanan byte. Temukan catatan tentang BOM di sini:
Dalam kode UCS ada karakter yang disebut "ZERO WIDTH NO-BREAK SPACE", yang dikodekan sebagai FEFF. FFFE adalah karakter yang tidak ada di UCS, sehingga seharusnya tidak muncul dalam transmisi yang sebenarnya. Spesifikasi UCS merekomendasikan agar kita mentransfer karakter "ZERO WIDTH NO-BREAK SPACE" sebelum mentransmisikan aliran byte. Dengan cara ini, jika penerima menerima FEFF, ini menunjukkan bahwa aliran byte adalah Big-Endian; Jika FFFE diterima, ini menunjukkan bahwa bytestream adalah Little-Endian. Oleh karena itu, karakter "ZERO WIDTH NO-BREAK SPACE" juga disebut BOM.
UTF-8 tidak memerlukan BOM untuk menunjukkan urutan byte, tetapi dapat menggunakan BOM untuk menunjukkan bagaimana ia dikodekan. Pengkodean UTF-8 dari karakter "ZERO WIDTH NO-BREAK SPACE" adalah EF BB BF. Jadi jika penerima menerima aliran byte yang dimulai dengan EF BB BF, mereka tahu itu adalah pengkodean UTF-8.
Windows menggunakan BOM untuk menandai bagaimana file teks dikodekan.
Selain itu, FAQ-BOM di situs web unicode menjelaskan BOM secara rinci. Otoritas alam resmi, tetapi dalam bahasa Inggris, tampaknya lebih melelahkan.
Dalam file yang dikodekan UTF-8, BOM menempati tiga byte. Jika Anda menggunakan Notepad untuk menyimpan file teks sebagai pengkodean UTF-8, buka file dengan UE dan beralih ke status pengeditan heksadesimal untuk melihat FFFE di awal. Ini adalah cara yang baik untuk mengidentifikasi file yang dikodekan UTF-8, perangkat lunak menggunakan BOM untuk mengidentifikasi apakah file tersebut dikodekan UTF-8, dan banyak perangkat lunak juga mengharuskan file yang diimpor harus memiliki BOM. Namun, masih banyak software yang tidak mengenali BOM. Ketika saya meneliti Firefox, saya tahu bahwa di versi awal Firefox, ekstensi tidak dapat memiliki BOM, tetapi Firefox 1.5 dan versi yang lebih baru mulai mendukung BOM. Sekarang saya menemukan bahwa PHP juga tidak mendukung BOM.
PHP dirancang tanpa mempertimbangkan BOM, yang berarti tidak mengabaikan tiga karakter BOM di awal file yang dikodekan UTF-8. Karena harus ada di Seperti yang saya lihat di wiki Bo-Blog, Bo-Blog yang juga menggunakan PHP juga terganggu oleh BOM. Masalah lain disebutkan: "Karena keterbatasan mekanisme pengiriman COOKIE, dalam file yang sudah memiliki BOM di awal file ini, COOKIE tidak dapat dikirim (karena PHP telah mengirim header file sebelum COOKIE dikirim), sehingga fungsi login dan logout tidak valid. Semua fungsi yang mengandalkan COOKIE dan SESI tidak valid. Ini harus menjadi alasan halaman kosong di latar belakang WordPress, karena salah satu file yang dieksekusi berisi BOM, dan ketiga karakter akan dikirim, menyebabkan fungsionalitas yang bergantung pada cookie dan sesi gagal.
Solusinya adalah menyimpan file sebagai kode ASCII jika hanya berisi karakter bahasa Inggris (atau karakter dalam pengkodean ASCII). Jika Anda menggunakan editor seperti UE, klik File->Convert->UTF-8 ke ASCII, atau pilih pengkodean ASCII di Simpan Sebagai. Jika itu adalah baris yang diakhiri dalam format DOS, Anda dapat membukanya dengan Notepad, klik Simpan Sebagai, dan pilih pengkodean ASCII. Jika berisi karakter Cina, Anda dapat menggunakan fungsi simpan sebagai UE dan memilih "UTF-8 tanpa BOM". Silakan lihat gambar di bawah ini:
Menurut instruksi wiki Bo-Blog: Editplus perlu disimpan sebagai gb dan kemudian sebagai UTF-8. Namun, berhati-hatilah saat melakukan ini, semua karakter yang tidak termasuk dalam pengkodean GBK akan hilang. Jika ada beberapa karakter non-Cina dalam file, jangan gunakan metode ini. (Dari aspek kecil ini, UE - UltraEdite-32 memang jauh lebih baik daripada Editplus, Editplus terlalu ringan)
Cara lain yang saya temukan adalah dengan menggunakan editor file yang disediakan oleh Wordpress. Metode ini tidak terbatas, dan tidak perlu mengunduh editor khusus, lagipula, semua orang menggunakan Wordpress. Pertama, aktifkan izin tulis dari file yang ingin Anda edit di ftp, lalu masukkan latar belakang WordPress - editor file > manajemen >, masukkan jalur untuk mengedit file, dan klik Edit file. Anda tidak akan dapat melihat tiga karakter pertama di layar pengeditan yang muncul, tetapi tidak apa-apa, posisikan kursor Anda sebelum karakter pertama dari seluruh file dan tekan tombol Backspace. OK, klik Perbarui File, segarkan di ftp, Anda dapat melihat bahwa file 3 byte lebih kecil, dan selesai.
Akhirnya, ini adalah masalah besar, semua orang yang ingin menulis plugin mereka sendiri, mengedit plugin orang lain untuk digunakan sendiri, dan perlu memodifikasi template (ini diperkirakan dibutuhkan oleh semua orang), yang terbaik adalah memahami pengetahuan di atas, agar tidak kewalahan ketika ada masalah.
|