Invata PHP cu punctsivirgula.ro

I. Introducere
II. Notiuni de baza
III. Notiuni avansate
IV. Aplicatii
V. Extra
C O N T I N U T
Siruri de caractere

 » Siruri de caractere

   – Ghilimele duble

   – Apostrof

   – Notatie speciala

 » Operatii cu siruri

   – Lungimea

   – Cautarea in sir

   – Subsiruri

   – Transformarea

   – Impartirea

   – Interpretarea

   – Masuri de siguranta


Siruri de caractere    3 ! 

Sirurile de caractere sunt bucati de text, bine delimitate, folosite in codul-sursa pentru diferite scopuri. PHP prezinta particularitati in modul in care sunt folosite string-urile, dupa cum se poate vedea in exemplele de mai jos.

Important! Sirurile de caractere sunt expresii (entitati ce au si returneaza o valoare). Asadar, un string poate fi folosit, pe langa, afisare, in atribuiri, la verificari, etc. In exemplele ce urmeaza s-a optat pentru afisarea sirurilor.


Siruri de caractere delimitate de ghilimele duble

Sirurile delimitate prin ghilimele duble au particularitatea ca pot interpreta variabilele si caracterele speciale din interiorul lor. Astfel, la evaluarea textului, variabilele existente in interiorul lui sunt inlocuite cu valoarea lor iar rezultatul final este returnat.

<?php
$a = "valoarea variabilei"; // definesc o variabila
print "Textul definit cu ghilimele contine $a"; 
 
// va afisa
// Textul definit cu ghilimele contine valoarea variabilei
?>

O alta particularitate a acestor siruri o reprezinta folosirea backslash-ului (caracterul \). Acesta are o functie speciala de marcare a anumitor caractere care nu pot fi incluse in mod normal intr-un text (din cauza ca sunt ele insele caractere speciale). Din acest motiv backslash-ul poarta numele de escape character.

<?php
print "Ma numesc \"Alex\"!"; // sir ce contine ghilimele, se foloseste \" pentru a afisa ghilimele
 
print "Text afisat pe 3 linii: \n linia 2 si \n linia3";
// atentie, textul e afisat pe 2 linii in sursa HTML cu ajutorul caracterului \n  (new-line) 
// pentru verificare vizualizati sursa paginii (alegeti "View Source" din browser) 
 
print "Am castigat \$30 :D"; // caracterul dolar are un statut aparte (marcheaza variabilele) 
// pentru a afisa semnul $ asa cum este se foloseste \$
 
print "Text cu \\backslash\\."; // intrucat backslash \ este un caracter special el 
// poate fi afisat ca atare intr-un text doar daca este dublat
 
// daca e folosit doar un singur \ PHP ar trata textul diferit:
print "Text fara \backslash\- \nu se afiseaza corec\t.";
 
?>

Siruri de caractere delimitate de ghilimele simple

Sirurile delimitate prin ghilimele simple nu permit interpretarea variabilelor continute si nici a caracterelor speciale cu exceptia \' si \\

<?php
$a = 'valoarea variabilei'; // definesc o variabila
print 'Textul definit cu ghilimele contine $a'; // Textul definit cu ghilimele contine $a
 
print 'Porecla ta e Kelu\' ?'; // sir delimitat de ghilimele simple ce contine un apostrof
print 'Text cu backslash \\'; // sir delimitat de ghilimele simple ce contine un backslash
 
print 'Alte escape chars nu sunt interpretate \n \t \b'; // textul este afisat ca atare
?>


Siruri de caractere delimitate cu notatia speciala <<<

Aceste siruri de caractere au avantajul ca nu necesita marcarea (escaparea) delimitatorilor prin \' sau \". In rest, aceste stringuri sunt tratate in acelasi mod ca cele delimitate de ghilimele duble, in sensul ca permit interpretarea variabilelor si a altor caractere speciale.

<?php
$a = 'valorii lor'; // definesc o variabila
 
print <<<TXT
Text pe mai multe linii. <br />
Delimitatorii pot avea orice nume: TXT, START, etc, cu urmatoarele conditii: <br />
- ambii delimitatori (de inceput si sfarsit) trebuie sa aiba acelasi nume
- inainte de primul delimitator se foloseste <<<
- delimitatorul de inceput nu trebuie sa fie urmat de spatiu sau alt caracter (important!)
- delimitatorul de final sa fie la inceputul liniei (fara spatii inainte)
- dupa delimitatorul final se pune punct si virgula ;
- pot contine ghilimele " sau apostrof ' fara nevoia de a le escapa
- permit interpretarea variabilelor si afisarea $a
TXT;
?>

In versiunile mai noi de PHP (de la 5.3.0) a fost introdusa posibilitatea de a defini siruri prin notatia speciala <<< fara a interpreta variabilele continute. Exemplul de mai jos foloseste un sir astfel definit (vezi diferenta la delimitatorul de inceput).

<?php
$a = 'valoarea'; // definesc o variabila
 
print <<<'TXT'
Incepand cu versiunea 5.3.0 exista un alt mod de delimitare a sirurilor 
in care variabilele si caracterele speciale nu sunt interpretate. <br />
Asadar $a si \n raman asa cum sunt.
TXT;
?>
Heineken a spus intrebare - 09.05.2013

in cazul versiunii de dupa 5.3.0 in cazul scrierii cu "<<<" cum as putea face sa.mi execute comanda $a fara a strica intregul text...ma refer la varianta particulara..si nu la modul general sa.mi strice tot textul...

Sergiu a spus versiunea - 28.02.2014

Eu folosesc versiunea 5.5.9 iar in cazul scrierii cu "<<<" trebuie sa escapez ghilimelele si apostroful ,nu imi citeste comanda <br /> ,si primesc o eroare de la variabila $a si o eroare de la inceputul textului!

Andrei a spus raspuns pentru Heineken - 16.06.2016

pe linia: print <<<'TXT' va trebui sa stergi cele doua apostrofuri si vei vedea conversia.


Adauga un comentariu la aceasta sectiune.

 


Operatii cu siruri de caractere    4 ! 

Mai jos sunt prezentate operatiile uzuale cu siruri de caractere si functiile oferite de limbajul PHP pentru realizarea lor.


Lungimea sirului

$s = "acesta este un text";
$sir = "stiu PHP stiu HTML stiu CSS";
 
# ce lungime are sirul? (numarul de caractere) 
print strlen( $s ); // 19

Cautarea unei secvente

# verific daca un cuvant sau text (in cazul de fata cuvantul 'PHP') apare in 
# sirul exprimat prin variabila $sir
if( strstr( $sir, 'PHP' ) !== false ) print 'gasit';
else print "nu am gasit";
 
# pentru a nu tine cont de litere mari/mici se foloseste stristr
if( stristr( $sir, 'phP' ) !== false ) print 'gasit';

Afisarea unui subsir

# afisez o sectiune din sir
print substr( $sir, 0, 4); // stiu
print substr( $sir, 5 ); // PHP stiu HTML stiu CSS
print substr( $sir, 5, -3 ); // PHP stiu HTML stiu
print substr( $sir, -3 ); // CSS
 
# returnez doar un caracter din string
print $sir{5}; // P
print $sir{ strlen($sir)-1 }; // S

Transformarea sirului

# inlocuirea unor secvente
print str_replace( "stiu", "invat", $sir); // invat PHP invat HTML invat CSS
 
# schimb tipul literelor (mari, mici)
print strtoupper( $s ); // ACESTA ESTE UN TEXT
print strtolower( $sir ); // stiu php stiu html stiu css
print ucfirst( $s ); // Acesta este un text
print ucwords( $s ); // Acesta Este Un Text
 
# sterg spatiile de la inceput si sfarsit: trim, ltrim, rtrim
print trim('      ok        '); // ok
 
# caractere "enter" transformate in <br />
print nl2br( "acesta e afisat pe \n 2 linii" ); // acesta e afisat pe <br /> 2 linii

Impartirea (spargerea) sirului

# impart sirul dupa un caracter, cuvant sau un alt sir
$output1 = explode( "stiu ", $sir ); // impart dupa stiu<spatiu>
/*
Array (
    [0] => PHP 
    [1] => HTML 
    [2] => CSS
)
*/
 
# impart sirul dupa o expresie regulata (regex)
$output2 = preg_split( '/ /', $s ); // impart dupa spatiu
/* 
Array (
    [0] => acesta
    [1] => este
    [2] => un
    [3] => text
)
*/
 
# operatia inversa impartirii unui sir:
$a = implode( 'invat ', $output1 ); // invat PHP invat HTML invat CSS
$b = join( '-', $output2 ); // acesta-este-un-text
Nota: implode si join sunt echivalente (nu exista nici o diferenta intre ele), pe cand explode si preg_split sunt diferite.

Concatenarea (legarea) sirurilor

print 'Text 1' . " legat de " . 'text 2' . "\n"; // Text 1 legat de text 2
 
// se pot concatena siruri rezultate din alte functii sau din variabile
print ucfirst($sir) . '!!! ' . $s;

Nota: prin concatenarea sirurilor se obtine in final un singur sir, care este tratat ca atare, de sine statator. Altfel spus, prin legarea mai multor siruri se obtine o singura entitate (o singura expresie). Aceasta poate fi transmisa ca parametru unor functii sau instructiuni precum print care accepta un singur argument.


Interpretarea sirului

# parsez un Query String
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
print $first;  // value
print $arr[0]; // foo bar
print $arr[1]; // baz
 
parse_str($str, $output);
print $output['first'];  // value
print $output['arr'][0]; // foo bar
print $output['arr'][1]; // baz

Masuri de siguranta

In cazul in care textul provine din surse nesigure (cum ar fi un formular de comentarii), atunci este indicat sa fie "sterilizat" (sanitized), prin eliminarea elementelor ce pot fi daunatoare (tag-uri HTML, caractere speciale, etc).

print addslashes( "Baiatu' ia vino-ncoa'!" ); # Baiatu\' ia vino-ncoa\'!
# functia inversa este stripslashes();
 
print htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); 
# afiseaza &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
# functia inversa este htmlspecialchars_decode() 
 
print strip_tags( "<p>E <b>bold</b></p>" ); // E bold
print strip_tags( "<p>E <b>bold</b></p>", '<b>' ); // E <b>bold</b>
Daniel a spus Interpretarea sirului - 06.11.2013

Ce reprezinta "first=value&arr[]=foo+bar&arr[]=baz"? Mecanic imi pot da seama ce anume se afiseaza, dar nu inteleg principiu, cred ca imi scapa ceva de la inceput. Puteti fi un pic mai expliciti la partea cu interpretarea sirului?

Alexandru a spus Pentru Daniel - 07.11.2013

Aceea reprezentare este des intalnita la paginile web, fiind formatul in care sunt transmise datele prin formulare.

Mai general vorbind, este o modalitate de a reprezenta niste date: perechi de cheie=valoare, separate prin caracterul &. Alte formate de reprezentare uzuale sunt XML, CSV, JSON.

Doar ca PHP are suport nativ pentru acest format si ofera functia parse_str pentru a decodifica datele din acest format.

Ca idee, ai putea folosi reprezentarea asta pentru a salva niste date intr-un fisier, pe care sa le citesti mai tarziu si sa le parsezi folosind parse_str. Este mult mai convenabil si mai rapid decat sa le scri intr-un XML sau alt format de fisiere.

Cristian a spus Operatii - 09.11.2013

informatiile aici sunt cam vagi dupa parerea mea .. dar ai putea sa le explici putin mai bine la operatii cu siruri de caractere..

Alex a spus Greoi - 24.06.2015

pare destul de bine structurat, dar pentru persoane (ca mine) care nu stiu o iota de programare, e foarte, foarte dificil sa inveti. ma lovesc de comenzi/functii care nu au fost explicate ce sunt si unde se folosesc. daca stiti vre-un tutorial in care te ia de la clasa 0, va rog sa mi-l recomandati.


Adauga un comentariu la aceasta sectiune.