Series PHP: Hati-hati dalam manipulasi string di PHP
Pernahkah kamu ingin melakukan manipulasi string dengan fungsi PHP seperti substr, strlen atau yang lainnya? Mulai sekarang, kamu harus hati-hati dalam menggunakannya. Berikut adalah penjelasannya.
Format Pertukaran Data di Komputer
Sebenarnya, teks yang berupa karakter atau simbol yang kita pakai ketika menggunakan komputer direpresentasikan ke dalam bentuk bilangan biner (0 dan 1) yang bisa dipahami oleh komputer. Untuk mengetahui karakter atau simbol apa menjadi biner apa, itu ada standarisasi format pertukaran datanya yang sudah berlaku secara internasional.
Dulu kita pakai format ASCII (American Standard Code for Information Interchange). Akan tetapi, karena komputer dipakai oleh orang di seluruh dunia dan butuh dukungan karakter atau simbol yang lebih banyak, untuk saat ini sistem komputer dan internet menggunakan UTF-8.
UTF-8 menghadirkan backward compatibility yang baik untuk ASCII. Oleh karena itu, representasi biner nya sama dengan ASCII tapi menggunakan beberapa byte untuk karakter diluar cakupan ASCII. Contoh karakter atau simbol jika dikonversikan ke biner dengan format standarisasi UTF-8:
- Untuk karakter alphabet latin ‘a’ jika dibinerkan menjadi
01100001(1 byte = 8 bit atau 8 binary digit ) - Untuk karakter alphabet kiril ‘П’ jika dibinerkan menjadi
11010000 10011111(2 byte = 16 bit atau 16 binary digit)
Melakukan Manipulasi String yang Benar
Kita sudah tahu bahwa tiap karakter alphabet dalam bahasa apapun memiliki representasi biner yang berbeda-beda dan jika menggunakan UTF-8 bisa lebih dari 1 byte. Fungsi PHP untuk manipulasi string (str*) bekerja pada basis byte bukan per karakter yang real kita lihat di output!
Disini kita akan coba salah satu fungsi substr sebagai studi kasus kita sekarang. Untuk contohnya, saya akan menggunakan kata Hello World dalam alphabet Rusia dan Latin sebagai pembanding.

Ini adalah informasi jika setiap karakter direpresentasikan menjadi bit karakter untuk masing-masing bahasa tadi.
Hello: H: 01001000 e: 01100101 l: 01101100 l: 01101100 o: 01101111 (space): 00100000 World: W: 01010111 o: 01101111 r: 01110010 l: 01101100 d: 01100100
Привет: П: 11010000 10011111 р: 11010001 10000000 и: 11010000 10111000 в: 11010000 10110010 е: 11010000 10110101 т: 11010001 10000010 (spasi): 00100000 м: 11010001 10000010 и: 11010000 10111000 р: 11010001 10000000
substr() memproses string sebagai urutan byte, bukan karakter. Oleh karena itu, ketika menggunakan substr() pada string yang di-encode dalam UTF-8 (yang mungkin menggunakan beberapa byte untuk satu karakter), fungsi ini akan memotong string berdasarkan posisi byte bukan berdasarkan karakter Unicode.
mb_substr() adalah versi multibyte dari substr(), yang dirancang untuk bekerja dengan string yang di-encode menggunakan format multibyte seperti UTF-8. Fungsi ini menangani string berdasarkan karakter, bukan byte, sehingga cocok untuk teks dalam berbagai bahasa.
What do you think?
Reactions