Fungsi string bawaan PHP mencakup hampir seluruh kebutuhan pengolahan teks sehari-hari, mulai dari memotong, mengganti, memecah, sampai menyusun kembali. Topik ini membahas empat kelompok fungsi yang paling sering dipakai, yaitu substr, str_replace, explode beserta implode, dan keluarga mb_* untuk teks multibyte. Pada teks multibyte, satu karakter dapat tersimpan dalam lebih dari satu byte. Setelah membaca topik ini, pemilihan fungsi yang tepat untuk setiap tugas pengolahan string dapat dilakukan secara sadar, termasuk memahami kapan penghitungan byte dan karakter menghasilkan angka yang berbeda.
Memotong string dengan substr#
Fungsi substr mengembalikan bagian dari sebuah string berdasarkan posisi awal dan panjang yang diminta. Posisi dihitung mulai dari nol, sehingga offset 0 menunjuk karakter pertama. Apabila offset bernilai negatif, perhitungannya mundur dari akhir string. Parameter panjang bersifat opsional, dan tanpa parameter itu potongan berlanjut sampai akhir string. Nilai panjang negatif membuang sejumlah karakter dari akhir, sedangkan offset yang melebihi panjang string menghasilkan string kosong.
Empat pemanggilan berikut memperlihatkan perilaku tersebut satu per satu.
<?php
echo substr("ABCDE", 1, 3) . PHP_EOL;
echo substr("ABCDE", -3, 2) . PHP_EOL;
echo substr("laporan-2026-03", -2) . PHP_EOL;
echo substr("ABCDE", 10) . "|" . PHP_EOL;BCD
CD
03
|Baris pertama mengambil tiga karakter mulai dari posisi 1, sehingga hasilnya BCD. Baris kedua memulai potongan pada karakter ketiga dari akhir string, yaitu tepat pada C, dan panjang 2 menghasilkan CD. Baris ketiga memanfaatkan offset negatif untuk mengambil dua karakter terakhir dari sebuah nama berkas. Baris keempat meminta potongan pada offset 10 yang tidak ada, sehingga keluarannya string kosong yang terlihat sebagai satu tanda garis vertikal.
Perilaku tersebut berbeda antarversi PHP. Sebelum PHP 8, substr mengembalikan false ketika offset berada di luar jangkauan, sedangkan sejak PHP 8 hasilnya string kosong. Kode lama yang membandingkan hasil substr dengan false perlu disesuaikan, dan pemeriksaan yang lebih jelas adalah membandingkan hasilnya dengan === '' untuk kondisi kosong.
Mengganti teks dengan str_replace#
Fungsi str_replace menggantikan seluruh kemunculan sebuah teks dengan teks penggantinya. Pencocokannya peka huruf besar dan kecil, sehingga Kopi dan kopi diperlakukan sebagai teks yang berbeda. String di PHP tidak dapat diubah nilainya secara langsung, sehingga fungsi ini mengembalikan string baru dan string asalnya tetap utuh. Parameter keempat yang bersifat opsional menerima variabel yang akan berisi jumlah penggantian yang terjadi.
<?php
$kalimat = "Es kopi hangat dan kopi tubruk";
echo str_replace("kopi", "teh", $kalimat) . PHP_EOL;
echo $kalimat . PHP_EOL;
$jumlah = 0;
$hasil = str_replace(",", ";", "a,b,c", $jumlah);
echo $hasil . " (" . $jumlah . " penggantian)" . PHP_EOL;
echo str_replace(["ini", "itu"], ["sini", "situ"], "ini dan itu") . PHP_EOL;Es teh hangat dan teh tubruk
Es kopi hangat dan kopi tubruk
a;b;c (2 penggantian)
sini dan situBaris pertama keluaran memperlihatkan kedua kemunculan kopi ikut tergantikan, sedangkan baris kedua membuktikan $kalimat tidak berubah. Baris ketiga menunjukkan parameter keempat terisi angka 2 karena terdapat dua koma yang digantikan. Baris keempat memakai bentuk array, yaitu teks pada posisi pertama array pencarian digantikan oleh teks pada posisi yang sama di array penggantinya.
Pencocokan yang tidak peka huruf besar dan kecil tersedia melalui fungsi kembar str_ireplace, yang parameter dan perilakunya sama persis dengan str_replace. Pada bentuk array, urutan kedua sisi harus selaras karena pasangan pencarian dan penggantian digabungkan menurut posisinya, bukan menurut namanya. Bentuk array ini menghemat pemanggilan ketika beberapa teks perlu digantikan sekaligus dalam satu langkah.
Memecah dan menyusun dengan explode dan implode#
Fungsi explode memecah sebuah string menurut pemisah tertentu dan mengembalikan array berisi potongan-potongannya. Fungsi ini cocok untuk membaca data berformat sederhana, misalnya satu baris nilai yang dipisahkan koma. Pasangannya adalah implode, yang menyusun elemen array menjadi satu string dengan penyambung tertentu, sehingga keduanya merupakan kebalikan satu sama lain. Parameter ketiga explode yang bersifat opsional membatasi jumlah elemen hasil, dan sisa string yang belum terpecah diletakkan pada elemen terakhir.
<?php
$baris = "Budi,17,XI RPL";
$kolom = explode(",", $baris);
print_r($kolom);
echo implode(" | ", $kolom) . PHP_EOL;
echo implode("-", [3, 1, 4, 1, 5]) . PHP_EOL;
print_r(explode(",", "a,b,c,d", 3));Array
(
[0] => Budi
[1] => 17
[2] => XI RPL
)
Budi | 17 | XI RPL
3-1-4-1-5
Array
(
[0] => a
[1] => b
[2] => c,d
)Keluaran pertama memperlihatkan $baris terpecah menjadi tiga elemen menurut koma, dan spasi dalam XI RPL tidak ikut memecah karena pemisahnya hanyalah koma. Pemanggilan implode menyatukan kembali elemen tersebut dengan penyambung yang berbeda dari pemisah semula. Pemanggilan terakhir membatasi hasil pada tiga elemen, sehingga c,d tetap menyatu pada elemen ketiga.
Parameter pemisah tidak boleh berupa string kosong, dan PHP 8 menolaknya dengan ValueError karena tidak ada batas yang jelas untuk dipotong. Pemisah yang terdiri atas lebih dari satu karakter tetap diperbolehkan dan dicocokkan apa adanya, sehingga explode(", ", $daftar) hanya memecah pada koma yang diikuti spasi.
Byte dan karakter: keluarga mb_*#
Fungsi strlen dan substr menghitung panjang serta posisi dalam byte, bukan dalam karakter. Pada penyandian UTF-8, huruf Latin biasa memakai satu byte per karakter, sehingga "Jakarta" terhitung 7 byte sekaligus 7 karakter. Karakter di luar huruf Latin memakai dua sampai empat byte, sehingga string "こんにちは" yang berisi lima karakter Jepang tersimpan sebagai lima belas byte. Teks bahasa Indonesia umumnya beraksara ASCII, tetapi nama orang, judul, dan teks dari sumber luar dapat memuat karakter non-ASCII kapan saja.
Diagram berikut memperlihatkan bagaimana lima karakter Jepang tersebut tersimpan sebagai lima belas byte yang berurutan.
Keluarga fungsi mb_* bekerja menurut karakter dengan membaca penyandian string, yang bawaannya adalah UTF-8. Fungsi mb_strlen menghitung karakter, mb_substr memotong tanpa memutus karakter di tengah, dan mb_strtoupper mengubah huruf sesuai aturan penyandiannya. Contoh berikut membandingkan kedua kelompok fungsi pada teks yang sama.
<?php
echo strlen("Jakarta") . " byte" . PHP_EOL;
echo mb_strlen("Jakarta") . " karakter" . PHP_EOL;
echo strlen("こんにちは") . " byte" . PHP_EOL;
echo mb_strlen("こんにちは") . " karakter" . PHP_EOL;
$potongan = substr("こんにちは", 0, 4);
echo bin2hex($potongan) . PHP_EOL;
echo mb_substr("こんにちは", 0, 2) . PHP_EOL;
echo strtoupper("Café") . PHP_EOL;
echo mb_strtoupper("Café") . PHP_EOL;7 byte
7 karakter
15 byte
5 karakter
e38193e3
こん
CAFé
CAFÉEmpat baris pertama menegaskan perbedaan penghitungan pada teks Jepang, sedangkan "Jakarta" memberikan angka yang sama untuk keduanya. Baris e38193e3 adalah tampilan heksadesimal dari substr("こんにちは", 0, 4), yaitu tiga byte penuh milik karakter pertama ditambah satu byte awal karakter kedua yang terpotong. Fungsi bin2hex dipakai di sini agar byte yang rusak itu tercetak aman sebagai teks. Sebaliknya, mb_substr mengembalikan dua karakter utuh. Dua baris terakhir memperlihatkan strtoupper yang berbasis byte hanya mengubah huruf Latin sederhana sehingga é tetap kecil, sedangkan mb_strtoupper mengubahnya menjadi É.
Kombinasi explode dengan keluarga mb_* muncul pada tugas kecil berikut, yaitu membentuk inisial dari sebuah nama lengkap.
<?php
function buatInisial(string $namaLengkap): string
{
$kata = explode(" ", trim($namaLengkap));
$inisial = "";
foreach ($kata as $satuKata) {
if ($satuKata === "") {
continue;
}
$inisial .= mb_strtoupper(mb_substr($satuKata, 0, 1));
}
return $inisial;
}
echo buatInisial("Budi Santoso") . PHP_EOL;
echo buatInisial("dewi lestari") . PHP_EOL;
echo buatInisial("Ali") . PHP_EOL;BS
DL
AFungsi buatInisial memecah nama menurut spasi, lalu mengambil satu karakter pertama dari setiap kata dengan mb_substr dan mengkapitalkannya dengan mb_strtoupper. Pemeriksaan $satuKata === "" menjaga agar spasi ganda tidak menghasilkan elemen kosong. Nama yang ditulis huruf kecil sekalipun menghasilkan inisial berhuruf kapital karena kapitalisasi terjadi di dalam fungsi.
Kesalahan umum#
Empat kesalahan berikut paling sering muncul saat mengolah string.
substrataustrlendipakai pada teks UTF-8 yang memuat karakter non-ASCII dan hasilnya dianggap aman. Penghitungan berbasis byte dapat memutus karakter di tengah sehingga string hasil tidak valid. Perbaikannya adalah menggunakanmb_substrdanmb_strlenuntuk teks dari sumber luar.explodedipanggil dengan pemisah yang ternyata tidak ada dalam string. Hasilnya bukan array kosong, melainkan array berisi satu elemen string utuh, sehingga akses ke$kolom[1]memicu warning karena kunci tersebut tidak ada. Perbaikannya adalah memeriksacount($kolom)sebelum membaca elemennya.- Hasil
str_replacedianggap mengubah string asalnya. String di PHP tidak dapat diubah nilainya secara langsung, sehingga penggantian yang tidak disimpan akan hilang. Perbaikannya adalah menampung nilai kembalian ke variabel, sebagaimana dilakukan pada contoh di atas. - Keluarga
mb_*dipanggil tanpa memastikan ekstensi mbstring terpasang. Fungsi yang tidak ditemukan memicu error fatal dan program berhenti pada baris pemanggilannya. Perbaikannya adalah memeriksa ketersediaan ekstensi pada lingkungan sebelum memakai fungsi tersebut, karena mbstring terpasang pada hampir semua distribusi PHP modern.
Ringkasan#
substrmemotong string menurut offset dan panjang, mendukung offset negatif dari akhir string, dan menghasilkan string kosong bila offset berada di luar jangkauan.str_replacemenggantikan seluruh kemunculan teks dan mengembalikan string baru, mendukung bentuk array, serta dapat melaporkan jumlah penggantian melalui parameter keempatnya.explodememecah string menjadi array menurut pemisah, sedangkanimplodemenyusun array menjadi string dengan penyambung.strlendansubstrmenghitung byte, sedangkanmb_strlendanmb_substrmenghitung karakter, dan keluargamb_*wajib dipakai untuk teks UTF-8 yang memuat karakter non-ASCII.
Referensi#
- substr — PHP Manual — Dokumentasi pemotongan string beserta perilaku offset dan panjang negatif.
- str_replace — PHP Manual — Dokumentasi penggantian teks, bentuk array, dan parameter penghitung.
- explode — PHP Manual — Dokumentasi pemecahan string menurut pemisah dan perilaku parameter limit.
- implode — PHP Manual — Dokumentasi penyusunan elemen array menjadi satu string.
- mb_strlen — PHP Manual — Dokumentasi penghitung panjang string menurut karakter dan parameter penyandiannya.