Blog Posts » PHP » Sempat dibuat pusing oleh http_build_query

Sempat dibuat pusing oleh http_build_query

Fungsi http_build_query adalah untuk membuat URL-encoded query string dari sebuah array/object. Lihat contoh berikut ini:
[Normal][RAW][Download]


Contoh diatas pada PHP 5.2.x (server website ini) menghasilkan:
[Normal][RAW][Download]


Sedangkan kasus pada script saya, setelah http_build_query saya tambahkan htmlspecialchars sehingga & (ampersand) akan berubah menjadi &:
[Normal][RAW][Download]


Namun berhubung di localhost saya menggunakan PHP versi 5.3.x ternyata hasilnya jadi seperti ini:
[Normal][RAW][Download]

Sebelumnya saya tidak tahu perbedaan tsb. Saya cek berulang-ulang kode saya sampai pusing tetapi belum juga menemukan kesalahan yang saya buat. Anehnya, jika saya menghilangkan htmlspecialchars akan normal hasilnya seperti di PHP 5.2.x. Apakah ini berarti di PHP 5.3.x pemisah standarnya tidak & tetapi &?? Maka jika menambahkan htmlspecialchars jadinya &.

Ternyata benar, saya baca lagi php.net nemu komentar dari v0idnull begini: "on my install of PHP 5.3, http_build_query() seems to use & as the default separator..." *whata :D

Nah jalan satu-satunya adalah tidak lagi menggunakan htmlspecialchars tetapi menetapkan separator/pemisah standar di opsi yang telah disediakan pada fungsi http_build_query. Seperti ini:
[Normal][RAW][Download]


Hasilnya akan sama baik di PHP 5.2.x maupun PHP 5.3.x:
[Normal][RAW][Download]

Sekian dulu curhatnya :D