PHP stringovi

Uvod u PHP stringove: Sve što trebate znati o tekstu u kodu

Dobrodošli u svijet PHP programiranja! Danas ćemo zaroniti u jedan od najfundamentalnijih, a ujedno i najčešće korištenih tipova podataka – stringove. Bilo da gradite web stranicu, obrađujete korisnički unos ili generirate izvještaje, rad sa stringovima je neizbježan. Stoga, hajde da detaljno istražimo što su stringovi u PHP-u, kako ih koristiti i koje su najbolje prakse.

Što je string u PHP-u?

U najjednostavnijem smislu, string je niz znakova. To je način na koji programski jezici, uključujući PHP, predstavljaju tekstualne podatke. Svaki put kada radite s riječima, rečenicama, imenima, URL-ovima, HTML kodom ili bilo kojim drugim tekstom, vi radite sa stringovima.

U PHP-u, stringovi se mogu deklarirati na nekoliko načina, najčešće korištenjem jednostrukih ili dvostrukih navodnika.

<?php
$ime = 'Marko'; // String s jednostrukim navodnicima
$pozdrav = "Zdravo, svijete!"; // String s dvostrukim navodnicima
$adresa = "Ulica jorgovana 5"; // Još jedan string
?>

Razlika između jednostrukih i dvostrukih navodnika

Ovo je ključna razlika koju svaki PHP developer mora razumjeti:

  • Jednostruki navodnici ('): PHP tretira sadržaj unutar jednostrukih navodnika doslovno. To znači da se varijable unutar stringa neće interpretirati (zamijeniti svojom vrijednošću), niti će se većina escape sekvenci obraditi (osim \' i \\).

    <?php
    $ime = 'Ana';
    echo 'Moje ime je $ime.'; // Ispisat će: Moje ime je $ime.
    echo 'Ovo je nova linija\n.'; // Ispisat će: Ovo je nova linija\n.
    ?>
    

    Prednost je što je brže (PHP ne mora tražiti varijable), ali i jednostavnije ako ne želite interpolaciju.

  • Dvostruki navodnici ("): PHP interpretira sadržaj unutar dvostrukih navodnika. To uključuje zamjenu varijabli njihovim vrijednostima (interpolacija) i obradu escape sekvenci (poput \n za novu liniju, \t za tabulator itd.).

    <?php
    $ime = 'Ana';
    echo "Moje ime je $ime."; // Ispisat će: Moje ime je Ana.
    echo "Ovo je nova linija.\n"; // Ispisat će: Ovo je nova linija. (s novom linijom)
    ?>
    

    Dvostruki navodnici su praktičniji kada trebate dinamički umetati varijable u string.

Rad sa stringovima: Osnovne operacije

PHP nudi bogat set alata za manipulaciju stringovima. Evo nekih osnovnih operacija:

Konkatenacija (spajanje) stringova

Spajanje (konkatenacija) je proces kombiniranja dva ili više stringova u jedan. U PHP-u se to radi pomoću operatora točke (.).

<?php
$pozdrav = "Dobar ";
$dan = "dan!";
$punPozdrav = $pozdrav . $dan; // Spaja "Dobar " i "dan!"
echo $punPozdrav; // Ispisat će: Dobar dan!

$poruka = "Pozdrav, " . $ime . "! Kako ste?";
echo $poruka; // Ispisat će (ako je $ime = 'Ana'): Pozdrav, Ana! Kako ste?
?>

Duljina stringa

Funkcija strlen() vraća duljinu stringa (broj znakova).

<?php
$tekst = "Ovo je neki tekst.";
echo strlen($tekst); // Ispisat će: 18
?>

Napomena: strlen() broji bajtove, što može biti problem kod više-bajtovnih znakova (npr. hrvatska slova š, đ, č, ć, ž) ako je encoding UTF-8. Za takve slučajeve, bolje je koristiti mb_strlen() (ako je omogućen mbstring ekstenzija).

Pristup znakovima

Možete pristupiti pojedinim znakovima stringa koristeći uglate zagrade, slično kao kod polja.

<?php
$word = "Hello";
echo $word[0]; // Ispisat će: H
echo $word[1]; // Ispisat će: e
echo $word[strlen($word) - 1]; // Ispisat će: o (zadnji znak)
?>

Opet, budite oprezni s više-bajtovnim znakovima. mb_substr() je prikladnija funkcija za siguran rad s dijelovima stringova u UTF-8.

Ispis stringova

Najčešće funkcije za ispis stringova su echo i print.

  • echo: Može ispisati više stringova odvojenih zarezom i nema povratnu vrijednost. Nešto je brži od print.
  • print: Može ispisati samo jedan string i uvijek vraća 1.
<?php
$ime = "Pero";
echo "Zdravo", " ", $ime, "!"; // Zdravo Pero!
print "Doviđenja!"; // Doviđenja!
?>

Korisne PHP funkcije za stringove

PHP ima stotine ugrađenih funkcija za manipulaciju stringovima. Evo nekih od najkorisnijih:

Pretvaranje stringova

  • strtoupper($string): Pretvara sve znakove u stringu u velika slova.
  • strtolower($string): Pretvara sve znakove u stringu u mala slova.
  • ucfirst($string): Pretvara prvi znak stringa u veliko slovo.
  • ucwords($string): Pretvara prvi znak svake riječi u stringu u veliko slovo.
<?php
$tekst = "ovo je neki tekst.";
echo strtoupper($tekst);   // OVO JE NEKI TEKST.
echo strtolower("VELIKI TEKST"); // veliki tekst
echo ucfirst($tekst);      // Ovo je neki tekst.
echo ucwords($tekst);      // Ovo Je Neki Tekst.
?>

Pretraživanje i zamjena

  • strpos($string, $search): Pronalazi poziciju prvog pojavljivanja podstringa unutar stringa. Vraća false ako nije pronađen.
  • substr($string, $start, $length): Izrezuje dio stringa.
  • str_replace($search, $replace, $string): Zamjenjuje sva pojavljivanja podstringa drugim podstringom.
  • preg_replace($pattern, $replacement, $string): Snažnija verzija str_replace koja koristi regularne izraze za pretraživanje i zamjenu.
<?php
$recenica = "Ovo je primjer rečenice za pretraživanje i zamjenu.";
$pozicija = strpos($recenica, "primjer"); // 7 (počinje od 0)
echo $pozicija;

$podstring = substr($recenica, 7, 7); // primjer
echo $podstring;

$novaRecenica = str_replace("primjer", "testni tekst", $recenica);
echo $novaRecenica; // Ovo je testni tekst rečenice za pretraživanje i zamjenu.
?>

Uklanjanje praznina

  • trim($string): Uklanja praznine (uključujući razmake, tabulatore, nove linije) s početka i kraja stringa.
  • ltrim($string): Uklanja praznine samo s lijeve strane stringa.
  • rtrim($string): Uklanja praznine samo s desne strane stringa.
<?php
$neuredjenTekst = "   Neki tekst s prazninama.   ";
echo "|" . trim($neuredjenTekst) . "|"; // |Neki tekst s prazninama.|
?>

Podjela i spajanje stringova

  • explode($delimiter, $string): Dijeli string u polje (array) stringova, koristeći navedeni delimiter (razdjelnik).
  • implode($delimiter, $array): Spaja elemente polja u jedan string, koristeći navedeni delimiter.
<?php
$tagovi = "php,web,programiranje,tutoriali";
$nizTagova = explode(",", $tagovi); // Array: ['php', 'web', 'programiranje', 'tutoriali']
print_r($nizTagova);

$drugiNiz = ['jabuka', 'kruska', 'sljiva'];
$spojenTekst = implode(" i ", $drugiNiz); // jabuka i kruska i sljiva
echo $spojenTekst;
?>

Escape sekvence

Escape sekvence su posebni nizovi znakova koji se koriste unutar stringova (posebno unutar dvostrukih navodnika) za predstavljanje znakova koje je teško ili nemoguće izravno upisati.

Neki uobičajeni primjeri:

  • \n: Nova linija (new line)
  • \t: Tabulator
  • \$: Znak dolara (ako ne želite da se tretira kao varijabla)
  • \": Dvostruki navodnik (unutar dvostrukih navodnika)
  • \': Jednostruki navodnik (unutar jednostrukih navodnika)
  • \\: Backslash
<?php
echo "Prvi red.\nDrugi red s \t tabulatorom.";
echo "<br>";
echo "Cijena je \$100.";
echo "<br>";
echo "Ovo je tekst s \"navodnicima\" unutar stringa.";
?>

Heredoc i Nowdoc sintaksa

Za vrlo duge stringove ili stringove s mnogo navodnika i novih linija, PHP nudi heredoc i nowdoc sintaksu.

  • Heredoc (<<<IDENTIFIER): Ponaša se kao string u dvostrukim navodnicima (podržava varijable i escape sekvence).
  • Nowdoc (<<<'IDENTIFIER'): Ponaša se kao string u jednostrukim navodnicima (sadržaj se tretira doslovno, bez interpolacije varijabli ili obrade escape sekvenci).
<?php
$ime = "Jana";
$heredocTekst = <<<EOT
Ovo je višelinijski tekst.
Varijabla \$ime će se interpolirati: $ime.
Možete koristiti "navodnike" bez bježanja.
EOT;
echo $heredocTekst;

$nowdocTekst = <<<'END_TEXT'
Ovo je drugi višelinijski tekst.
Varijabla $ime se NEĆE interpolirati.
\n Ni escape sekvence se ne procesiraju.
END_TEXT;
echo "<br><br>";
echo $nowdocTekst;
?>

Dobre prakse

  • Koristite odgovarajuće navodnike: Odlučite se za jednostruke ili dvostruke navodnike ovisno o tome trebate li interpolaciju varijabli ili escape sekvence. Za performanse, jednostruki navodnici su neznatno brži ako vam ne trebaju posebne mogućnosti dvostrukih.
  • Obratite pažnju na encoding: Uvijek koristite UTF-8 encoding za vaše datoteke i baze podataka. Kada radite s duljinom ili podstringovima koji sadrže više-bajtovne znakove (kao što su hrvatska slova), koristite mb_* funkcije (mb_strlen(), mb_substr()) umjesto standardnih str*() funkcija.
  • Sigurnost: Kada ispisujete korisnički unos na web stranicu, uvijek ga “očistite” pomoću funkcija poput htmlspecialchars() kako biste spriječili XSS (Cross-Site Scripting) napade. Kada radite s bazama podataka, koristite pripremljene izjave (prepared statements) kako biste spriječili SQL injection.
  • Čitljivost koda: Duge konkatenacije mogu postati nečitljive. Razmislite o korištenju sprintf() ili heredoc sintakse za složenije stringove.

Zaključak

Stringovi su temeljni dio PHP programiranja i ključni za gotovo svaku web aplikaciju. Razumijevanje načina na koji PHP radi sa stringovima, korištenje pravih funkcija za prave zadatke i primjena dobrih praksi osigurat će vam pisanje robustanog, sigurnog i efikasnog koda. Nadam se da vam je ovaj članak pružio sveobuhvatan uvid u svijet PHP stringova i potaknuo vas na daljnje eksperimentiranje!