Banyak tugas pengolahan teks bermuara pada satu pola yang sama: menemukan bagian tertentu dari sebuah string, lalu menggantinya dengan teks lain. Template surat yang menyerap placeholder [nama], penyensoran kata kasar, penyamaran nomor kartu kredit, sampai penggantian separator tanggal — semuanya adalah operasi penggantian teks. Pada Chapter ini kita akan membeda-bedakan empat alat utama yang disediakan PHP untuk kebutuhan tersebut, beserta jebakan halus di antara mereka, dan menutup dengan str_repeat untuk mengulang teks.

Mengganti Teks dengan str_replace #

Fungsi str_replace() mencari semua kemunculan sebuah teks lalu menggantinya dengan teks pengganti. Fungsi ini bekerja pada byte string apa adanya — tanpa wildcard, tanpa pola khusus; teks yang dicari harus cocok persis.

php
<?php
$pesan = "Halo Budi, selamat pagi Budi!";
$baru = str_replace("Budi", "Siti", $pesan, $jumlah);

echo $baru . "\n";
echo "Jumlah penggantian: $jumlah\n";

Output yang Dihasilkan:

text
Halo Siti, selamat pagi Siti!
Jumlah penggantian: 2

Mari kita telaah parameter yang dipakai pada contoh di atas:

  1. Argumen pertama ("Budi"): teks yang dicari (search).
  2. Argumen kedua ("Siti"): teks pengganti (replace).
  3. Argumen ketiga ($pesan): string subjek yang diproses; string aslinya tidak berubah karena str_replace() mengembalikan string baru.
  4. Argumen keempat ($jumlah): parameter opsional yang dikirim by reference. PHP mengisi variabel tersebut dengan jumlah penggantian yang benar-benar terjadi — pada contoh ini 2 karena kata “Budi” muncul dua kali.

Parameter keempat ini berguna untuk validasi, misalnya memastikan sebuah placeholder benar-benar ditemukan sebelum template dianggap selesai diproses.

Mengganti Banyak Pasangan Sekaligus #

Argumen search dan replace boleh berupa array. PHP lalu memproses pasangan demi pasangan: elemen pertama array search diganti dengan elemen pertama array replace, dan seterusnya. Pola ini pas untuk memproses template dengan banyak placeholder.

php
<?php
$template = "Halo [nama], pesanan [produk] Anda sudah dikirim ke [alamat].";
$hasil = str_replace(
    ["[nama]", "[produk]", "[alamat]"],
    ["Siti", "Kopi Gayo 250g", "Jl. Merdeka No. 10"],
    $template
);
echo $hasil . "\n";

Output yang Dihasilkan:

text
Halo Siti, pesanan Kopi Gayo 250g Anda sudah dikirim ke Jl. Merdeka No. 10.

PHP membaca kedua array secara paralel: "[nama]" dipasangkan dengan "Siti", "[produk]" dengan "Kopi Gayo 250g", dan "[alamat]" dengan "Jl. Merdeka No. 10". Jika array replace lebih pendek dari array search, pasangan yang kekurangan pengganti akan diganti dengan string kosong — jadi pastikan urutan kedua array selalu sejajar.

Satu kekhasan penting: penggantian berlangsung berurutan, bukan simultan. Hasil penggantian pasangan pertama ikut dipindai lagi oleh pasangan kedua. Perhatikan contoh berikut:

php
<?php
$kalimat = "abc";
echo str_replace(["a", "b"], ["b", "c"], $kalimat) . "\n";

Output yang Dihasilkan:

text
ccc

Pada contoh di atas, "a" diganti "b" lebih dulu sehingga string sementara menjadi "bbc"; kemudian giliran "b" yang dipindai — termasuk hasil penggantian barusan — dan semuanya berubah menjadi "c", menghasilkan "ccc". Perilaku berantai seperti ini kadang diinginkan, tetapi sering kali justru menjadi sumber bug ketika pasangan penggantian saling tumpang tindih.

Penggantian Tanpa Memedulikan Kapitalisasi #

str_replace() membandingkan teks secara case-sensitive: "php" tidak akan cocok dengan "Php". Ketika kapitalisasi tidak boleh dipermasalahkan — misalnya menyeragamkan penulisan nama teknologi — gunakan str_ireplace() yang perilakunya sama persis kecuali perbandingannya case-insensitive.

php
<?php
$teks = "PHP itu menyenangkan. Php 8.4 adalah versi terbaru, php.net dokumenya lengkap.";
echo str_ireplace("php", "PHP", $teks) . "\n";

Output yang Dihasilkan:

text
PHP itu menyenangkan. PHP 8.4 adalah versi terbaru, PHP.net dokumenya lengkap.

Semua varian "PHP", "Php", dan "php" cocok dengan pola pencarian "php" dan diganti dengan tulisan "PHP" huruf besar seragam. Fungsi str_ireplace() juga menerima array untuk search dan replace seperti str_replace().

Mengganti Berdasarkan Posisi dengan substr_replace #

Ketika yang Anda ketahui bukan teks yang dicari melainkan posisinya (offset byte), fungsi yang tepat adalah substr_replace(). Fungsi ini mengganti sebagian string mulai offset tertentu sepanjang jumlah byte tertentu. Kasus klasiknya adalah menyamarkan nomor kartu kredit: dua belas digit pertama disembunyikan, empat digit terakhir dibiarkan terlihat.

php
<?php
$kartu = "4111111111111111";
$masked = substr_replace($kartu, str_repeat("*", 12), 0, 12);
echo $masked . "\n";

$tanggal = "2026-01-15";
echo substr_replace($tanggal, "T", 10, 0) . "\n";

Output yang Dihasilkan:

text
************1111
2026-01-15T

Mari kita bedah kedua pemanggilan di atas:

  1. substr_replace($kartu, "************", 0, 12): mulai byte ke-0, ganti 12 byte pertama dengan dua belas tanda bintang. Hasilnya empat digit terakhir tetap utuh.
  2. substr_replace($tanggal, "T", 10, 0): panjang 0 berarti tidak ada byte yang dibuang — teks "T" hanya disisipkan pada offset 10, tepat di antara tanggal dan waktu. Trik sisipan ini sering dipakai untuk membangun format gabungan.

Offset dan panjang pada substr_replace() dihitung dalam byte, bukan karakter. Untuk data ASCII seperti nomor kartu angka digit ini tidak menjadi masalah, tetapi berhati-hatilah saat subjeknya berisi karakter multibyte.

Penggantian Simultan dengan strtr #

Fungsi strtr() menawarkan dua bentuk pemakaian. Bentuk pertama menerima string pencari dan string pengganti — keduanya dipetakan karakter demi karakter, bukan sebagai satu potongan teks utuh.

php
<?php
echo strtr("a=b=c", "=", " AND ") . "\n";

Output yang Dihasilkan:

text
a b c

Pada bentuk string di atas, hanya karakter pertama dari " AND " yang dipakai: setiap "=" diganti " " (satu spasi), sehingga hasilnya "a b c". Jika kedua string berbeda panjang, karakter berlebih diabaikan. Karena sifat per karakter ini, bentuk string strtr() cocok untuk transliterasi sederhana seperti mengganti separator atau tanda baca.

Bentuk kedua — dan yang lebih sering dipakai — menerima array pasangan penggantian. Dalam bentuk ini, strtr() bekerja simultan: string yang sudah dihasilkan oleh satu pasangan tidak dipindai ulang oleh pasangan lain, dan pasangan terpanjang selalu diutamakan.

php
<?php
echo strtr(
    "Selamat pagi, [nama]! Pesanan [produk] sudah dikirim.",
    ["[nama]" => "Budi", "[produk]" => "Buku PHP"]
) . "\n";

Output yang Dihasilkan:

text
Selamat pagi, Budi! Pesanan Buku PHP sudah dikirim.

Mengulang Teks dengan str_repeat #

Kebutuhan kecil yang nyaris selalu muncul bersama penggantian teks adalah pengulangan: garis pemisah, tanda bintang penyamaran, atau indentasi. Fungsi str_repeat() mengembalikan string yang diulang sebanyak jumlah tertentu.

php
<?php
$garis = str_repeat("=", 30);
echo $garis . "\n";
echo "[" . str_repeat("*", 5) . "]\n";

Output yang Dihasilkan:

text
==============================
[*****]

Contoh substr_replace() pada bagian sebelumnya juga memanfaatkan str_repeat("*", 12) untuk membangun blok bintang penyamar tanpa menuliskan dua belas karakter secara manual. Jumlah pengulangan harus 0 atau lebih; nilai negatif memicu ValueError.

Ringkasan #

str_replace() menjadi pilihan default untuk penggantian berbasis teks, str_ireplace() untuk versi case-insensitive-nya, substr_replace() untuk penggantian berbasis posisi, dan strtr() dengan array untuk penggantian banyak pasangan yang aman sekaligus simultan. Dengan str_repeat() sebagai pelengkap, perangkat penggantian teks Anda sudah lengkap. Berikutnya kita akan membersihkan tepi string: membuang spasi berlebih dan menambahkan padding dengan trim(), str_pad(), dan kawan-kawannya.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

contoh.php

Unduh berkas
php
<?php

// contoh.php — rangkuman Chapter Replacing Text dalam satu program utuh.
// Jalankan dengan: php contoh.php

// 1) str_replace dengan penghitung penggantian
$pesan = "Halo Budi, konfirmasi pesanan Budi telah kami terima.";
$pesan = str_replace("Budi", "Siti", $pesan, $jumlah);
echo "[$jumlah penggantian] $pesan\n";

// 2) Template dengan banyak placeholder via strtr (simultan)
$template = "Halo [nama], tagihan [bulan] sebesar [total] sudah terbit.";
$isi = strtr($template, [
    "[nama]"  => "Budi",
    "[bulan]" => "Januari 2026",
    "[total]" => "Rp250.000",
]);
echo $isi . "\n";

// 3) str_ireplace: menyeragamkan kapitalisasi
$catatan = "pelajari Php setiap hari, php.net adalah sahabat Anda.";
echo str_ireplace("php", "PHP", $catatan) . "\n";

// 4) substr_replace: menyamarkan nomor kartu
$kartu = "4111111111111111";
echo substr_replace($kartu, str_repeat("*", 12), 0, 12) . "\n";

// 5) str_repeat: garis pemisah laporan
echo str_repeat("-", 40) . "\n";