D
P
0

WordPress & PHP

Kutip Pintar (“ ”) Menyusup ke PHP dan Menjatuhkan Situs: Parse Error yang Bikin Bingung

23 Juni 2026·4 menit baca
Kutip Pintar (“ ”) Menyusup ke PHP dan Menjatuhkan Situs: Parse Error yang Bikin Bingung

Situs sebuah platform booking berbasis WordPress yang saya bangun tiba-tiba berubah jadi layar putih total. Tidak ada konten, tidak ada error yang terlihat di browser, hanya halaman kosong. Saya baru saja menempelkan satu helper kecil ke dalam functions.php tema, helper yang saya salin dari catatan dokumen, lalu refresh. Begitu saya buka log, baris ini menyambut saya:

PHP Parse error:  syntax error, unexpected '”' (T_STRING) in /wp-content/themes/custom-theme/functions.php on line 42

Kode yang memicunya kelihatan sangat normal. Ini potongan yang baru saya tempel:

function get_listing_data( $id ) {
    $type = get_post_meta( $id, “listing_type”, true );
    return $type;
}

Coba lihat baris kedua. Bagi mata saya saat itu, “listing_type” terlihat seperti string biasa. Saya bahkan membacanya tiga kali dan tidak menemukan apa-apa yang janggal. Tapi PHP menolaknya mentah-mentah, dan satu file rusak ini cukup untuk menjatuhkan seluruh halaman.

Kenapa ini terjadi

Masalahnya bukan pada logika kode, melainkan pada karakter tanda kutipnya. Saat saya menyalin snippet dari sebuah dokumen, editor dokumen itu diam-diam mengubah tanda kutip lurus biasa menjadi "kutip pintar" alias smart quotes. Yang menempel ke file saya bukan " (ASCII, U+0022) melainkan dan (Unicode, U+201C dan U+201D). Untuk tanda kutip tunggal pun sama ceritanya: ' ASCII berubah jadi dan (U+2018 dan U+2019).

Bagi PHP, ini bencana. Parser PHP hanya mengenali tanda kutip lurus ASCII sebagai pembatas string. Karakter curly quote itu, di mata parser, bukan pembuka string sama sekali, melainkan token asing yang muncul di tempat yang tidak ia mengerti. Karena itu pesannya berbunyi unexpected '”'. PHP berhenti total saat parsing, file gagal di-compile, dan di production yang menyembunyikan error, hasilnya adalah white screen of death tanpa petunjuk apa-apa.

Yang membuat bug ini jahat adalah karena ia nyaris tidak terlihat. Di banyak font editor, lengkungan halus kutip pintar dan garis lurus kutip ASCII tampak hampir identik, apalagi pada ukuran font kecil. Mata kita membaca "tanda kutip" dan otak langsung menganggapnya benar. Padahal di level byte, dua karakter ini sama sekali berbeda: kutip ASCII hanya satu byte, sedangkan kutip pintar adalah karakter multibyte UTF-8 (tiga byte). Satu karakter tak kasat mata itu sudah cukup untuk meruntuhkan seluruh file PHP.

Perbaikannya

Perbaikan intinya sepele begitu Anda tahu penyebabnya: ketik ulang tanda kutipnya menjadi ASCII murni. Saya hapus kedua kutip pintar di baris itu dan mengetiknya kembali langsung di editor kode (yang tidak melakukan auto-correct), bukan menempel lagi.

function get_listing_data( $id ) {
    $type = get_post_meta( $id, 'listing_type', true );
    return $type;
}

Setelah disimpan, file langsung ter-compile dan situs hidup kembali. Tapi mengetik ulang secara manual hanya berhasil kalau Anda sudah tahu baris mana yang bermasalah. Saat masih meraba-raba, cara tercepat menemukannya adalah dengan mencari byte karakternya secara eksplisit. Saya grep langsung mencari karakter kutip pintarnya di seluruh tema:

grep -rn $'\xe2\x80\x9c\|\xe2\x80\x9d\|\xe2\x80\x98\|\xe2\x80\x99' wp-content/themes/

Tiga byte e2 80 9c itu adalah representasi UTF-8 dari , dan begitu seterusnya untuk varian kutip lainnya. Cara ini langsung menunjuk baris dan kolom yang bersalah tanpa harus menebak.

Kalau tidak mau bermain dengan byte, ada dua jalan lain. Pertama, nyalakan fitur "show invisibles" atau render karakter khusus di editor; banyak editor akan menampilkan kutip pintar dengan glyph yang sedikit berbeda begitu Anda tahu harus mencurigainya. Kedua, banyak linter bisa diatur untuk menandai karakter non-ASCII di dalam source. Saya akhirnya mengonfigurasi editor agar memberi peringatan setiap ada smart quote atau karakter non-ASCII yang nyelonong masuk ke file kode, supaya hal ini tidak terulang diam-diam.

Pelajaran

Pelajaran terbesarnya: jangan pernah menempel kode PHP langsung dari sumber rich-text. Dokumen, word processor, dan banyak aplikasi chat punya kebiasaan diam-diam mengubah tanda kutip lurus jadi kutip pintar demi estetika tipografi. Untuk prosa itu bagus, untuk source code itu racun. Kalau Anda harus menyalin snippet dari tempat-tempat seperti itu, lewatkan dulu melalui editor plain-text, atau ketik ulang tanda kutipnya secara manual.

Dan yang paling bikin frustrasi dari bug semacam ini adalah karena kodenya "terlihat" benar. Tidak ada typo logika, tidak ada kurung yang hilang, tidak ada titik koma yang lupa. Semuanya tampak rapi, namun satu karakter multibyte tak kasat mata sanggup menjatuhkan seluruh file dan, lewatnya, seluruh situs. Sejak insiden itu, setiap kali saya melihat parse error yang "mustahil" pada baris yang kelihatannya sempurna, hal pertama yang saya curigai adalah karakter tersembunyi, bukan logika kodenya.