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.

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.


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 \\


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.

Delimitatorii pot avea orice nume: TXT, START, etc, cu urmatoarele conditii:
- 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).

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
print nl2br( "acesta e afisat pe \n 2 linii" ); // acesta e afisat pe
2 linii

Impartirea (spargerea) sirului

# impart sirul dupa un caracter, cuvant sau un alt sir $output1 = explode( "stiu ", $sir ); // impart dupa stiu /* 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("Test", ENT_QUOTES); # afiseaza <a href='test'>Test</a> # functia inversa este htmlspecialchars_decode() print strip_tags( "

E bold

" ); // E bold print strip_tags( "

E bold

", '' ); // E bold
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.