Masukan pengguna hampir selalu datang tidak bersih: spasi ekstra di awal dan akhir alamat email, titik beruntun di ujung kalimat, atau karakter aneh hasil salin-tempel dari web. Di sisi lain, keluaran yang rapi justru butuh tambahan: nomor invoice dengan nol di depan, judul laporan di tengah garis, dan deskripsi panjang yang terbungkus rapi di kolom sempit. Pada Chapter ini kita akan menguasai dua keluarga operasi tersebut — trimming untuk membuang karakter di tepi string, dan padding untuk menambahkannya — ditutup dengan wordwrap() untuk membungkus teks panjang.
Membersihkan Tepi String dengan trim, ltrim, dan rtrim #
trim() mengembalikan string baru dengan karakter tertentu dibuang dari kedua ujungnya. Tanpa argumen tambahan, karakter yang dibuang adalah whitespace standar: spasi, tab, baris baru, carriage return, byte NUL, dan tab vertikal. Dua saudaranya lebih selektif — ltrim() hanya membersihkan tepi kiri (left), rtrim() hanya tepi kanan (right).
<?php
$emailPengguna = " [email protected] ";
$bersih = trim($emailPengguna);
echo "Sebelum: [$emailPengguna]\n";
echo "Sesudah: [$bersih]\n";
echo strlen($emailPengguna) . " menjadi " . strlen($bersih) . " karakter\n";Output yang Dihasilkan:
Sebelum: [ [email protected] ]
Sesudah: [[email protected]]
22 menjadi 16 karakterTanda kurung siku berperan sebagai penanda agar spasi terlihat jelas di keluaran. Dua puluh dua karakter menyusut menjadi enam belas setelah tiga spasi di kiri dan tiga spasi di kanan dibuang; spasi di tengah alamat — seandainya ada — akan dibiarkan apa adanya karena trim() hanya menyentuh tepian. Perhatikan pula bahwa trim() tidak mengubah string asli: hasilnya dikembalikan sebagai nilai baru yang kita simpan ke $bersih.
Argumen kedua yang opsional, bernama charlist, mengganti daftar whitespace default dengan himpunan karakter pilihan kita:
<?php
$teks = "...halo, Budi!...";
echo ltrim($teks, ".") . "\n";
echo rtrim($teks, ".") . "\n";
echo trim($teks, ".") . "\n";Output yang Dihasilkan:
halo, Budi!...
...halo, Budi!
halo, Budi!ltrim() membuang semua titik di kiri tetapi membiarkan titik di kanan, rtrim() sebaliknya, dan trim() membersihkan keduanya. Kata kuncinya adalah semua: pemotongan berlangsung berulang selama karakter berikutnya masih termasuk anggota charlist — perilaku yang akan kita bedah lebih dalam di bagian berikutnya.
Charlist adalah Himpunan Karakter, Bukan Kata #
Perilaku berulang tadi biasanya justru diinginkan. Penanda dekoratif seperti barisan bintang hilang tuntas dalam satu pemanggilan: trim("***penting***", "*") mengembalikan penting tanpa sisa. Jebakannya muncul ketika charlist disalahpahami sebagai sebuah kata yang dibuang dari tepi:
<?php
$namaBerkas = "laporan-versi-d.docx";
echo rtrim($namaBerkas, ".docx") . "\n";Output yang Dihasilkan:
laporan-versi-Niatnya menghapus ekstensi .docx, tetapi hasilnya laporan-versi-. Charlist ".docx" berarti himpunan {., d, o, c, x}, dan pemotongan dari kanan berhenti baru setelah huruf d pada akhiran -d ikut termakan karena d anggota himpunan tersebut. Untuk membuang awalan atau akhiran tetap sepanjang beberapa karakter, alat yang tepat adalah substr() yang memotong berdasarkan posisi:
<?php
$alamatWeb = "www.contoh.com";
// buang empat karakter pertama: "www."
echo substr($alamatWeb, 4) . "\n";Output yang Dihasilkan:
contoh.comsubstr($alamatWeb, 4) memotong tepat empat karakter dari kiri — w, w, w, . — tanpa memedulikan karakter sesudahnya, sehingga hasilnya contoh.com. Dalam praktik, potongan seperti ini dipadukan dengan pemeriksaan awalan str_starts_with() dari Chapter Searching dalam String
agar kode tidak salah memotong ketika awalan ternyata tidak ada.
mb_trim untuk Teks Multibyte #
Sejak PHP 8.4, keluarga trim hadir versi multibyte-nya: mb_trim(), mb_ltrim(), dan mb_rtrim(). Selain bekerja aman pada teks UTF-8, fungsi-fungsi ini membuang karakter whitespace Unicode yang tak dikenali pendahulunya — termasuk non-breaking space \u{00A0} yang kerap menyusup dari hasil salin-tempel halaman web.
<?php
$kota = " São Paulo ";
$bersih = mb_trim($kota);
echo "[$bersih]\n";
echo strlen($kota) . " menjadi " . strlen($bersih) . " byte\n";Output yang Dihasilkan:
[São Paulo]
12 menjadi 10 byteSpasi biasa di kedua tepi hilang, menyisakan São Paulo yang utuh; ukurannya menyusut dari dua belas byte menjadi sepuluh. Perbedaan nyata dengan trim() terlihat pada non-breaking space:
<?php
// \u{00A0} adalah non-breaking space, bukan spasi biasa
$teks = "\u{00A0}Budi\u{00A0}";
echo strlen($teks) . "\n";
echo strlen(trim($teks)) . "\n";
echo strlen(mb_trim($teks)) . "\n";Output yang Dihasilkan:
8
8
4trim() sama sekali tidak mengenali non-breaking space — panjang tetap delapan byte karena karakter tersebut tidak masuk daftar defaultnya. mb_trim() membuang keduanya hingga tersisa empat byte milik kata Budi. Karakter ini terlihat persis seperti spasi di mata, tetapi beda byte — sumber bug halus ketika input pengguna dibandingkan atau disimpan tanpa pembersihan yang tepat.
Menambah Karakter dengan str_pad #
str_pad() bekerja ke arah sebaliknya: menambah karakter sampai string mencapai panjang tertentu. Kasus klasiknya adalah nomor dokumen — 7 harus tampil sebagai 0007 agar rata kanan dalam kolom database maupun kertas.
<?php
$nomorUrut = 7;
echo str_pad($nomorUrut, 5, "0", STR_PAD_LEFT) . "\n";Output yang Dihasilkan:
00007Empat argumen str_pad() bekerja sebagai berikut: string masukan, panjang target, string pengisi, dan tipe perataan. STR_PAD_LEFT menambah pengisi di kiri sehingga angka menjadi 00007 — lima digit sesuai target. Dua tipe lainnya mengisi di sisi berbeda:
<?php
$nama = "Budi";
echo str_pad($nama, 10, "-", STR_PAD_RIGHT) . "|\n";
echo str_pad($nama, 10, "-", STR_PAD_LEFT) . "|\n";
echo str_pad($nama, 10, "-", STR_PAD_BOTH) . "|\n";Output yang Dihasilkan:
Budi------|
------Budi|
---Budi---|STR_PAD_RIGHT (nilai default) menambah tanda hubung di kanan, STR_PAD_LEFT di kiri, dan STR_PAD_BOTH membagi pengisi ke kedua sisi — tiga di kiri dan tiga di kanan karena enam slot diisi merata. Tanda | di akhir baris sengaja dipasang sebagai penanda tepi agar panjang hasil terlihat jelas.
Membungkus Teks Panjang dengan wordwrap #
Teks panjang di kolom sempit harus dipotong di batas kata, bukan di tengah kata. wordwrap() membungkus string pada lebar kolom tertentu dengan menyisipkan pemisah di sela kata:
<?php
$deskripsi = "Kursi kayu jati dengan ukiran tangan dan bantalan busa tebal";
echo wordwrap($deskripsi, 20, "\n") . "\n";Output yang Dihasilkan:
Kursi kayu jati
dengan ukiran tangan
dan bantalan busa
tebalSetiap baris hasil tidak pernah melebihi dua puluh karakter, dan pemotongan selalu jatuh pada spasi antarkata sehingga setiap kata tetap utuh. Kata terakhir yang kelebihan — tebal — otomatis turun ke baris baru. Mode default ini ideal untuk teks biasa, tetapi gagal ketika string memuat potongan panjang tanpa spasi seperti URL; parameter keempat cut memaksa pemotongan keras:
<?php
$tautan = "https://example.com/produk/kursi-kayu-jati";
echo wordwrap($tautan, 20, "\n", true) . "\n";Output yang Dihasilkan:
https://example.com/
produk/kursi-kayu-ja
tiDengan cut bernilai true, pemotongan terjadi tepat di kolom ke-20 meski harus membelah kata: kursi-kayu-jati terbagi menjadi kursi-kayu-ja dan ti. Gunakan mode ini hanya untuk teks tanpa spasi seperti tautan atau hash, karena kata biasa yang ikut terbelah justru sulit dibaca.
Berkas contoh.php pada bagian bawah halaman merangkum seluruh contoh chapter ini dalam satu program utuh yang dapat langsung Anda jalankan.
Ringkasan #
trim(), ltrim(), dan rtrim() membuang karakter dari tepi string berdasarkan charlist — ingat bahwa charlist adalah himpunan karakter, bukan kata — sementara mb_trim() versi PHP 8.4 menangani whitespace Unicode seperti non-breaking space. Ke arah sebaliknya, str_pad() menambah pengisi hingga panjang target dengan tiga mode perataan, dan wordwrap() membungkus teks panjang pada batas kata. Teks yang telah dibersihkan dan dirapikan ini kerap perlu dipecah menjadi bagian-bagian atau digabung kembali — pekerjaan untuk explode() dan implode() pada Chapter Splitting dan Joining.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
contoh.php
Unduh berkas<?php
// Trimming, padding, dan wordwrap
$email = " [email protected] ";
echo "Email bersih: [" . trim($email) . "]\n";
$nomorInvoice = str_pad(7, 5, "0", STR_PAD_LEFT);
echo "Nomor invoice: INV-$nomorInvoice\n";
$judul = "Laporan Penjualan";
echo str_pad($judul, 30, "=", STR_PAD_BOTH) . "\n";
$deskripsi = "Kursi kayu jati dengan ukiran tangan dan bantalan busa tebal";
echo wordwrap($deskripsi, 20, "\n") . "\n";