Apar situatii cand dorim sa introducem ghilimele in interiorul unui textintr-o baza de date, dar SQL nu permite înglobarea unor ghilimele simple în interiorul valorii unui sir. Probleme similare pot aparea la introducerea unui text ce contine caractere speciale precum: \ + * ? ^ ( $ ), si care sunt trimise la un script PHP.
PHP include functii si facilitati pentru rezolvarea acestor situatii.
Fisierul de initializare PHP ("php.ini") contine optiuni de configurare care determina modul în care PHP controleaza datele provenite de la o sursa externa, cum sunt un formular HTML, un fisier text sau o baza de date.
Optiunea magic_quotes_gpc specifica modul în care PHP manipuleaza operatiile HTTP: GET si POST, precum si operatiile dintre PHP si MySQL sau cele cu variabile cookie. Daca optiunea este activata (ON), PHP prefixeaza automat ghilimelele simple, ghilimelele duble, caracterele backslash si caracterele nule (caracterele a caror valoare ASCII este 0) care apar într-o variabila HTTP, cu un caracter backslash (\).
Optiunea magic_quotes_runtime specifica modul în care PHP manipuleaza datele de origine externa. Daca aceasta optiune este activata, PHP ignora automat ghilimelele simple si duble care apar în datele externe, inclusiv datele din formularele HTML, din fisiere si baze de date.
Daca este activata optiunea magic_quotes_sybase, aceasta modifica efectul optiunilor magic_quotes_gpc si magic_quotes_runtime, astfel încât un caracter de tip ghilimele simple sa fie prefixat cu un alt caracter de tip ghilimele simple, nu cu un backslas.
Dar, în general, accesul la aceste comenzi din fisierul "php.ini" il are administratorul de sistem iar utilizatorii obisnuiti nu trebuie sa aiba posibilitatea de a aduce modificari în fisier. Astfel, pot fi folosite functii PHP care sa seteze aceste optiuni pe durata scriptului respectiv.
Functiile get_magic_quotes_gpc() si get_magic_quotes_runtime() returneaza fiecare valoarea optiunii PHP corespunzatoare setate in fisierul "php.ini". Mai mult, puteti folosi functia set_magic_quotes_runtime() pentru a specifica valoarea optiunii magic_quotes_runtime pentru restul duratei scriptului PHP curent.
De exemplu, pentru a dezactiva optiunea magic_quotes_runtime, invocati functia
PHP poate converti ghilimelele simple si duble dintr-un sir, folosind functia addslashes().
Daca PHP nu este configurat astfel încât sa converteasca aceste caractere din sir în mod automat, atunci trebuie sa executati manual aceasta modificare. Pur si simplu utilizati functia addslashes(), transferându-i ca argument sirul text. Aceasta adauga caracterul backslash "\" pentru conversia caracterelor de tip ghilimele simple, ghilimele duble, backslash si caractere nule
Aceasta conversie nu trebuie confundata cu o alta, si anume conversia de tip, care foloseste caracterul backslash (\).
Conversia mentionata în acest capitol consta din modificarea semnificatiei anumitor caractere, pentru a preveni o interpretare eronata a acestora de catre programele specializate, precum MySQL. Din acest motiv, toate conversiile mentionate în acest capitol fac referire la modificarea semnificatiei unor caractere, nu la conversiile de tip.
De exemplu, pentru a converti continutul sirului "$text" si a plasa rezultatul în variabila "$modificat", invocati functia dupa cum urmeaza:
Când lucrati cu texte HTML, conversia executata de functia addslashes() nu este suficienta, deoarece HTML este sensibil si la alte caractere speciale decât cele convertite de functia addslashes().
In schimb puteti folosi functia htmlspecialchars().
Aceasta converteste caracterele la care HTML este sensibil. Functie este utila cand se doreste ca un anumit sir sa nu contina marcaje HTML, ceea ce poate fi important in modul de operare a unei aplicatii, cum ar fi un tabel HTML.
Functia are urmatoarea forma:
Caracter | Rezultatul conversiei |
& (ampersand) | & |
"(ghilimele duble) | " (numait când este specificată opţiunea ENT_COMPAT sau ENT_QUOTES) |
'(ghilimele simple) | ' (numai când este specificată opţiunea ENT_QUOTES) |
< (mai mic decât) | < |
> (mai mare decât) | > |
O functie PHP conexa, htmlentities(), converteste toate caracterele cu echivalente în entitati HTML. Este acceptat setul de caractere ISO-8859-1
Si o alta functie utila pentru conversia textelor HTML este functia n12br(). Aceasta insereaza tag-ul <br /> anterior fiecarui caracter de tip linie noua care se gaseste in argumentul sau.
Când doriti sa codificati in PHP date ca parte a unei adrese URL, puteti folosi functia urlencode().
Aceasta functie înlocuieste fiecare caracter non-alfanumeric (cu exceptia spatiilor) cu un simbol al procentului (%), urmat de doua cifre hexazecimale care contin valoarea ASCII a caracterului. Spatiile sunt codificate sub forma de simboluri ale adunarii (+).
O functie conexa, în speta rawurlencode(), executa o conversie similara; cu deosebirea ca înlocuieste spatiile cu %20, conform RFC 1738, standardul Internet pentru codificarea adreselor URL.
Functiile urldecode() si rawurldecode() executa operatii complementare. Aceste functii sunt utile la crearea adreselor URL care includ perechi 'nume-valoare'.
De exemplu, sa presupunem ca avem un script PHP care trebuie sa creeze o pagina HTML ce contine o hiperlegatura spre adresa URL a unui motor de cautare. Termenul de cautare trebuie transmis în forma codificata URL, pentru ca serverul Web si browserul sa nu se "impiedice" de caracterele speciale. Pentru a codifica datele pentru o adresa URL, puteti folosi o metoda ca in exemplul urmator:
<table><tr> <th>Title 1</th> <th>Title 2</th> </tr></table>
.some_class { line-height: 150%; }
document.getElementById("id_button").onclick = function(){ window.open("http://coursesweb.net/"); }
$ar_dir = scandir("dir_name"); var_export($ar_dir);
He will sleep there. - El va dormi acolo.
Él dormirá allí. - El va dormi acolo.