Ada beberapa pengkodean karakter alfabet Cyrillic.
Saat membuat situs di Internet biasanya menggunakan:
Pengkodean lebih populer:
- iso-8859-5
- ibm866
- mac-cyrillic
Ini mungkin bukan seluruh daftar, ini adalah pengkodean yang sering saya temui.
Terkadang menjadi perlu untuk menentukan pengkodean teks. Dan di PHP bahkan ada fungsi untuk ini:
mb_detect_encoding
Tapi, seperti yang
dituliskan oleh m00t dalam artikel
Mendefinisikan Penyandian Teks dalam PHP - Tinjauan Solusi yang Ada plus Sepeda LainSingkatnya, itu tidak berfungsi.
Setelah membaca artikel
m00t, saya tidak terinspirasi oleh metodenya dan menemukan solusi ini:
Menentukan pengkodean teks dalam PHP dan PythonSeperti yang
saya katakan
lagi kode karakter
Saya menguji fungsi menentukan pengkodean dengan kode karakter, hasilnya memuaskan saya dan saya menggunakan fungsi ini selama beberapa tahun.
Baru-baru ini saya memutuskan untuk menulis ulang proyek tempat saya menggunakan fungsi ini, saya menemukan paket yang sudah jadi di packagist.org
cnpait / detect_encoding , di mana pengkodean ditentukan menggunakan metode
m00tPada saat yang sama, paket yang ditentukan diinstal lebih dari 1200 kali, yang berarti bukan hanya untuk saya saja tugas menentukan pengkodean teks muncul secara berkala.
Saya akan menginstal paket ini dan tenang, tetapi saya memutuskan untuk "bingung."
Secara umum, saya membuat paket saya:
onnov / detect-encoding .
Cara menggunakannya ditulis dalam README.md
Saya akan menulis tentang mengujinya dan membandingkannya dengan paket
cnpait / detect_encoding .
Metodologi pengujian
Ambil teks besar: Tolstoy - Anna Karenina
Total - 1'701'480 karakter
Kami menghapus semua yang tidak perlu, kami hanya meninggalkan alfabet Cyrillic:
$text = preg_replace('/[^--]/ui', '', $text);
Masih ada 1'336'252 tanda-tanda cyrillic.
Dalam loop, kami mengambil bagian dari teks (5, 15, 30, ... karakter), mengonversinya menjadi penyandian yang diketahui dan mencoba menentukan penyandian dengan skrip. Kemudian bandingkan dengan benar atau tidak.
Berikut adalah tabel di mana pengkodean di sebelah kiri, jumlah karakter yang olehnya pengkodean ditentukan di atas, tabel menunjukkan hasil keandalan dalam %%
Akurasi terburuk dengan Mac Cyrillic, Anda memerlukan setidaknya 60 karakter untuk menentukan pengodean ini dengan akurasi 92,15%. Pengkodean Windows-1251 juga memiliki akurasi yang sangat rendah. Hal ini disebabkan oleh fakta bahwa jumlah karakter mereka dalam tabel tumpang tindih.
Untungnya, penyandian mac-cyrillic dan ibm866 tidak digunakan untuk menyandikan halaman web.
Mari kita coba tanpanya:
Keakuratan tekadnya tinggi bahkan dalam kalimat pendek dari 5 hingga 10 huruf. Dan untuk frasa 60 huruf, akurasi penentuan mencapai 100%. Namun, pengodeannya ditentukan dengan sangat cepat, misalnya, teks yang lebih panjang dari 1.300.000 karakter Sirilik diperiksa dalam 0,00096 detik. (di komputer saya)
Dan hasil apa yang akan
ditunjukkan oleh metode statistik yang dijelaskan oleh
m00t :
Seperti yang Anda lihat, hasil dari menentukan encoding itu bagus. Kecepatan naskah tinggi, terutama dalam teks pendek, dalam teks besar kecepatannya jauh lebih rendah. Teks yang lebih panjang dari 1.300.000 karakter Cyrillic diperiksa dalam 0,32 detik. (di komputer saya).
Temuan saya
- Kedua metode ini memberikan hasil yang baik.
- Keakuratan metode dekat.
- Kecepatan menentukan oleh kode karakter lebih tinggi dalam teks besar, tetapi ini hampir tidak penting, karena tidak mungkin ada orang yang akan memeriksa teks yang begitu besar.
- Metode statistik masih memiliki potensi untuk meningkatkan akurasi penentuan pengkodean.
Metode mana yang digunakan terserah Anda. Pada prinsipnya, Anda bisa menggunakan keduanya sekaligus.