Fungsi String Dasar
Olah teks: strlen, substr, strpos, str_replace, explode, dan trim.
Kenapa Olah String Penting?
Hampir semua data yang masuk ke program berbentuk teks: nama dari form, email, alamat, komentar. Sebelum disimpan atau ditampilkan, teks perlu dirapikan (buang spasi berlebih), diperiksa (apakah mengandung kata tertentu?), dan diubah (jadi huruf besar semua). Fungsi string PHP adalah peralatan tukang cukur untuk teks.
<?php
// Contoh 1: merapikan input (wajib untuk semua data form!)
$nama = " Sinta Maharani ";
echo trim($nama); // "Sinta Maharani": buang spasi ujung
$komentar = "<b>Bagus!</b> ";
echo strip_tags($komentar); // "Bagus! ": buang tag HTML
echo trim(strip_tags($komentar)); // "Bagus!": kombinasi keduanya
$judul = "belajar php itu menyenangkan";
echo ucwords($judul); // "Belajar Php Itu Menyenangkan"
echo strtoupper("php"); // "PHP"
echo strtolower("PHP"); // "php"trim() adalah fungsi pertama yang harus dipanggil pada setiap input form: user sering mengetik spasi tak sengaja di awal/akhir. strip_tags() membuang tag HTML (penting untuk keamanan, dibahas di modul XSS).
<?php
// Contoh 2: memeriksa dan memotong string
$email = "[email protected]";
var_dump(str_contains($email, "@")); // bool(true): mengandung "@"?
var_dump(str_starts_with($email, "sinta")); // bool(true): diawali "sinta"?
var_dump(str_ends_with($email, ".com")); // bool(true): diakhiri ".com"?
$kalimat = "Saya belajar PHP di kelas XII";
echo substr($kalimat, 0, 11); // "Saya belajar": ambil 11 karakter pertama
echo substr($kalimat, -3); // "XII": 3 karakter terakhir
$teks = "apel, mangga, jeruk";
$daftar = explode(", ", $teks); // pecah jadi array: ["apel", "mangga", "jeruk"]
echo implode(" | ", $daftar); // gabung lagi: "apel | mangga | jeruk"Pasangan explode/implode adalah konverter string-array: explode memecah string menjadi array berdasar pemisah, implode menggabungkan array menjadi string. Keduanya dipakai terus, misalnya memecah tag yang dipisah koma.
Jebakan yang Sering Terjadi
Fungsi string tidak mengubah aslinya. trim($nama) mengembalikan string baru; $nama sendiri tetap berspasi. Wajib tampung: $nama = trim($nama);. Ini konsisten dengan array_merge dan kebanyakan fungsi PHP: yang diubah langsung hanya sedikit (seperti sort).
strpos mengembalikan 0 dianggap tidak ketemu. Sama seperti array_search: strpos("apel", "a") menghasilkan 0, dan if (!strpos(...)) salah. Solusi modern: pakai str_contains() (PHP 8+) yang langsung mengembalikan boolean, tanpa drama angka 0.
Membersihkan Input: Checklist
Urutan standar membersihkan input teks sebelum validasi:
<?php
function bersihkan(string $input): string {
$input = trim($input); // 1. buang spasi ujung
$input = preg_replace('/\s+/', ' ', $input); // 2. spasi ganda jadi satu
return $input;
}
$nama = bersihkan(" Sinta Maharani ");
echo "'$nama'"; // 'Sinta Maharani'
// Checklist per jenis input:
// - Nama: trim + batasi panjang + htmlspecialchars saat tampil
// - Email: trim + strtolower + filter_var
// - Komentar: trim + strip_tags (jika HTML dilarang) + htmlspecialchars saat tampil
// - Pencarian: trim + batasi 100 karakter (cegah DoS regex/query berat)Jangan pernah menyimpan spasi berlebih ke database: "Sinta" dan "Sinta " akan dianggap berbeda saat login atau pencarian, bug yang membingungkan user.
Catatan teknis: Fungsi string PHP peka terhadap huruf besar-kecil secara default (
"Apel" !== "apel"). Untuk perbandingan tanpa peduli kapital, ubah dulu keduanya denganstrtolower()sebelum dibandingkan.
Tantangan
Validasi email sederhana
Buat fungsi isEmailValid($email) yang return true jika string mengandung "@" DAN "." setelah "@". Pakai strpos. Tes dengan 3 email (2 valid, 1 tidak).