Php din nou despre ghilimele, eliminarea spațiilor și constantelor php_ini_

PHP: din nou, despre ghilimele, eliminarea spațiilor și constantelor PHP_INI_ *

Sarcina obișnuită de a exclude spațiile și / sau etichetele inutile de la intrarea utilizatorilor este rezolvată în aproape fiecare script PHP profesional.

Eliminați ușor etichetele cu funcția standard strip_tags. dar pentru a elimina toate spațiile suplimentare (inclusiv între cuvinte), nu avem suficientă ornamentare standard. cel puțin, trebuie să utilizați o expresie regulată:

(sau o expresie alternativă, ca aici).

Numai problema cu citate rămâne nerezolvată. Din păcate, cu setările implicite PHP (inclusiv, în versiunea curentă 5.3.1), citate din șirul trecut la metoda POST sau GET după datele introduse de utilizator, în timp ce afișarea lor pe ecran poate fi „ecranate“, adică „în codul se va transforma în # 92; ":

Intrarea "word1" va da la ieșire # 92; "cuvânt1 # 92;". Pentru setările citatelor în versiunile PHP 4-5, există deja 3 variabile, în versiunea viitoare 6 li se promite că vor fi eliminate.

magic_quotes_gpc - dacă directiva este activată, toate caracterele sunt '. “. \ Și NUL (un cod de zero octeți) va scăpa automat backslash \. Din moment ce opțiunea versiunea 5.3.0 depreciat, va fi eliminată în PHP 6.0.0. Nu modificați versiuni de software mai vechi de 4.2.3. Este activată în mod implicit, aceasta este setarea este "de vină" pentru ceea ce sa întâmplat cu noi cu cuvântul.

magic_quotes_runtime - Dacă este activat, cele mai multe funcții care returnează date dintr-un fișier de bază de date sau un text, va reveni la ecranul de aceeași backslash ghilimele duble și single. Dar asta nu e tot! Dacă directiva magic_quotes_sybase este inclusă suplimentar. atunci doar ghilimele simple sunt scapate, și nu prin tăietura inversă, ci prin aceeași citare unică! Din fericire, această directivă poate fi controlată programabil, în mod implicit este dezactivată, în versiunea 5.3.0 este declarată învechită, iar în 6.0.0 aceasta va fi eliminată.

magic_quotes_sybase - după cum sa menționat deja, în cazul în care această opțiune este activată, se schimbă regulile de ecranare un singur citat, acesta este înregistrat cu un citat unic suplimentar în loc de o bară oblică în cazul magic_quotes_gpc sau magic_quotes_runtime permise. Directiva poate fi controlată programabil, în mod implicit este dezactivată. Nicăieri nu este scris că este declarată depășită, însă în PHP 6.0.0 ar trebui eliminată și directiva.

Ce zici de toate acestea să nu se înnebunească și să asigure procesarea corectă a citatelor?

Am citat în mod repetat codul funcției magice. care înțelege această problemă, recent a devenit aceasta:

Adică, cele 2 directive pe care le puteți pune în software-ul, și pune (cu eroare de operator de control de la distanță „@“ - pentru versiunile viitoare), a treia directivă este verificată și procesată backslash „de prisos“, atunci când este necesar. Acesta din urmă este realizat de benzi de funcții standard. deși ar fi posibil și înlocuiri "manuale", așa cum am făcut înainte:

De asemenea, funcția get_magic_quotes_gpc nu poate fi apelată, limitată la ini_get standard:

P.S. Cu această abordare, funcția stripslashes va elimina șirul de caractere # 92; "chiar și în cazul în care este necesar, de exemplu, în această propoziție.Cum de a fi? Eu doar în astfel de cazuri înlocui simbolul" # 92; "cu codul HTML # 92;

Uneori este necesar să rezolvăm problema inversă - să afișăm simbolurile "periculoase" cu spate. Adăugați backslash-uri cu setarea magic_quotes_gpc dezactivată prin funcția standard de adăugare luminozitate. Dar dacă magic_quotes_gpc este activat, nu este necesar să faceți addslashes - veți primi un dublu screening. deoarece atunci funcția Addslashes se aplică automat tuturor datelor GET. POST. și COOKIE.

Acum, codul complet al exemplului care elimină etichetele de la intrare, toate spațiile suplimentare dintre token-uri care nu depind de setările de citate și returnează citatele la formular sunt:

(exemplul nu are etichete HTML de deschidere și închidere). După cum puteți vedea, înainte de a fi emise în etichetă

text ca valoare a câmpului de intrare (standardul HTML aici necesită valoarea sintaxei = "valoare în ghilimele duble"), am înlocuit simbolul "critic" pentru simbolurile PHP <.>. "și" la "entitățile HTML" corespunzătoare. lt;. gt; și așa mai departe. A funcționat acest standard htmlspecialchars. În general, ar trebui să faceți întotdeauna acest lucru, indiferent de setările citatelor.

În același timp, observăm o tehnică mai importantă, pe care începătorii o uită prea des. Înainte de a utiliza orice linie din codul interogării SQL generate de script, nu uitați să utilizați funcția mysql_real_escape_string după conectarea la baza de date - în articolul standard de ajutor pentru această funcție totul este foarte bine scris, de ce și de ce :)

În cele din urmă, pentru a afla ce fișier moduri în care php.ini directiva puteți schimba cu ușurință de la așa-numitele „constante PHP_INI_ *“, referindu-se lângă fiecare directivă în coloana schimbabile scrisă de unul dintre cele patru valori:

Definiția constants PHP_INI_ *

PHP_INI_USER - directiva poate fi instalată în scripturile utilizatorului prin metoda ini_set sau în registrul Windows;

PHP_INI_PERDIR - directiva poate fi setată în fișierul php.ini. htaccess sau httpd.conf;

PHP_INI_SYSTEM - directiva poate fi instalată în fișierul php.ini sau httpd.conf;

PHP_INI_ALL - directiva poate fi instalată oriunde.