Pada artikel sebelumnya telah kita bahas lengkap mengenai JSON Pada PHP, pada kesempatan ini, kita akan membahas bagaimana membuat JSON dari database beserta permasalahan yang ada. Show Sebelum melanjutkan membaca artikel ini, sebaiknya sobat sudah membaca artikel: Memahami JSON Pada PHP I. Membuat JSON dari DatabaseSebelum melanjutkan membahas tentang JSON dari database, kita perlu contoh data. Untuk contoh data, misal kita memiliki tabel artikel yang ada di database blog dengan data sebagai berikut:
Catatan: kolom content memiliki collation Selanjutnya, dengan fungsi
Hasil yang kita peroleh adalah:
Note: Perhatikan bahwa pada contoh diatas, karena sumber data berbentuk indexed array, maka data JSON awal yang dihasilkan juga berbentuk array. Atau karena data yang kita ambil hanya satu row, maka kita dapat langsung fetchhing data tersebut tanpa perlu menggunakan loop while sebagai berikut:
Hasil:
Perhatikan bahwa pada hasil diatas, karena sumber data berupa associative array, maka JSON yang dihasilkan berbentuk objek. Perbedaan array dan objek pada JSON dapat dibaca disini: Panduan Lengkap Memahami JSON II. Permasalahan Encoding UTF-8Pada artikel sebelumnya kita ketahui bahwa argumen pertama dari fungsi Ketika kita membuat JSON dari database, terkadang kita akan menemui permasalahan encoding ini, karena bisa jadi sebelum masuk ke database data tersebut tidak diencode menggunakan UTF-8, misal data dari inputan user. Melanjutkan contoh sebelumnya, mari kita ambil semua data artikel dan kita ubah menjadi JSON, script yang kita gunakan adalah sebagai berikut:
Ketika script tersebut kita jalankan, ternyata yang kita dapati hanyalah halaman kosong, kenapa? karena telah terjadi error dan jika ketika error,
fungsi Untuk mengetahui error yang terjadi, kita dapat menggunakan fungsiÂÂ
Dari error tersebut terlihat bahwa data mengandung character non UTF-8 sehingga menyebabkan data tersebut gagal diubah menjadi JSON. Pertanyaannya, bagaimana cara mengetahui character yang menyebabkan error? Mudahnya, kita print data aslinya terlebih dahulu, kemudian kita lihat hasilnya, misal:
hasil yang kita peroleh adalah: Jika kita perhatikan, terdapat karakter tanda tanya, karakter ini tidak dikenali oleh encoding yang ada (UTF-8) sehingga tidak dapat ditampilkan. Padahal jika kita lihat di database manager seperti phpMyAdmin, karakter tersebut berupa tanda strip ( – ). Catatan: Saya memasukkan data terebut dari Microsoft Word (copy-paste), yang ternyata encodingnya bukan UTF-8 meskipun jika dilihat sepintas tidak ada karakter yang aneh. III. Mengatasi Permasalahan Encoding UTF-8Untuk mengatasinya, kita tidak bisa hanya dengan mendefinisikan encoding di header, misal:
atau mendefinisikan di meta seperti ini:
Kenapa? Karena ketika kita mengambil data menggunakan fungsi
Sehingga jika kita lihat nilai HEX pada data hasil query, karakter tanda tanya tadi sebenarnya adalah: 0x96 atau character ke – 150 dari karakter ASCII sebagai berikut:
Karakter ke-150 ini termasuk extended character sehingga tidak tertampung dalam character set UTF-8 (UTF-8 hanya menampung character ASCII dasar, 0-127), sehingga, karakter tersebut tidak dapat ditampilkan. Lebih lanjut, jika karakter tersebut kita tampilkan menggunakan character set yang menampung karakter tersebut, seperti WINDOWS-1252 atau ISO-8859-1, maka karakter tersebut dapat tampil dengan baik, contoh
Hasil: NOTE: Lebih jauh tentang character set dapat dibaca di artikel: Memahami Character Set dan Character Encoding Solusinya? Lantas, solusinya bagaimana? Solusi termudahnya adalah kita ketik ulang tanda strip tadi (misal di phpMyAdmin), sehingga content benar-benar di encoding menggunakan utf-8. Cara lain adalah mendefinisikan encoding sebelum menjalankan fungsi
Hasil yang kita peroleh adalah:
Dengan cara ini, fungsi IV. TipsBagaimana agar data di database selalu di encoding menggunakan UTF-8? Satu satunya cara adalah memastikan semua data yang masuk ke dalam database telah diencode menggunakan UTF-8. Sebagai contoh: jika kita menyediakan form HTML untuk input data, pastikan halaman html tersebut menggunakan encoding UTF-8, misal dengan mendefinisikan meta charset seperti pada contoh sebelumnya.
Download: Demikian pembahasan tentang JSON dari Database dan cara mengatasi error “Malformed UTF-8 characters, possibly incorrectly encoded” ketika membuat JSON dengan PHP, semoga bermanfaat. Subscibe NowSuka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com |