Caractere speciale PHP. Htmlspecialchars - Convertește caracterele speciale în entități HTML. Simboluri matematice acceptate în HTML

Nota: Este activată versiunea adaptivă a site-ului, care se adaptează automat la dimensiunea redusă a browserului dumneavoastră și ascunde câteva detalii ale site-ului pentru ușurință în citire. Vizionare placuta!

Sunt bucuros să urez bun venit pe toți din nou pe paginile blogului dedicate tuturor complexităților creării și promovării de succes a site-urilor web - Site pe! În tutorialul PHP de astăzi vom acoperi subiecte precum tipuri de variabile, escape, caractere speciale și sintaxa heredoc în PHP.

Tipuri variabile

PHP are opt tipuri diferite de variabile, dintre care

4 tipuri scalare:

  • boolean (tip boolean sau logic)
  • întreg (numere întregi)
  • float (număr în virgulă mobilă)
  • şir

2 tipuri mixte:

  • matrice
  • obiect

2 tipuri speciale:

  • resursă

Înainte de a privi fiecare tip mai detaliat, merită să clarificăm că PHP NU este un limbaj puternic tipizat, ci un limbaj tipizat dinamic. Aceasta înseamnă că nu trebuie să declarăm în prealabil tipul fiecărei variabile (la creare). PHP însuși va ghici ce tip este o anumită variabilă, pe baza a ceea ce am introdus în această variabilă. Aceasta mai înseamnă că, spre deosebire de limbile cu tastare strictă, putem lua o variabilă cu un număr (întreg) și punem un șir (șir) și nu va fi o eroare! Aceasta este una dintre caracteristicile PHP pe care le place foarte mult oamenilor (începătorilor) care nu s-au ocupat anterior de programare. De regulă, până la urmă toată lumea ajunge la concluzia că acesta este un minus al limbii, nu un plus.

boolean- cel mai simplu tip. Poate lua doar 2 valori: Adevărat sau fals(adevărat sau fals), sunt insensibile la majuscule și minuscule (puteți scrie TRUE, trUe etc.). Un exemplu ilustrativ:

echo $nume, "
", $nume2; ?>

Rezultat:

După cum puteți vedea, browserul nu înțelege tipul boolean, spre deosebire de PHP, așa că atunci când încercați să scoateți Adevărat sau fals va afișa numărul pe pagină 1 sau linie goală.

Când sunt convertite la un tip boolean, următoarele valori sunt tratate ca FALSE:

  • întreg 0 (zero)
  • număr în virgulă mobilă 0,0 (zero)
  • șir gol și șir „0” sau „0”
  • matrice goală
  • tip special NULL (inclusiv variabile nesetate)

Toate celelalte valori sunt tratate ca TRUE.

// numar decimal$int = -5; // un număr negativ$int = 05; // număr octal$int = 0x1A; // număr hexazecimal
//Numere în virgulă mobilă (reale):$flt = 1,4; $flt = 1,2e3; $flt = 7E-10; ?>

Cu toate acestea, tipul cel mai des folosit în PHP poate fi considerat cu precizie siruri de caractere. Șirurile pot fi scrise fie între ghilimele simple, fie duble, dar niciodată nu sfătuiesc pe nimeni să scrie șiruri între ghilimele duble, deoarece, făcând acest lucru, forțați interpretul PHP să vă „analizeze” șirul pentru prezența variabilelor în el, care, deși ușor , vă încetinește munca. Chiar dacă doriți să utilizați variabile în șirul dvs., acest lucru se poate face folosind ghilimele simple + (concatenarea a două sau mai multe șiruri într-unul singur). Atunci de ce sunt necesare ghilimele duble? De exemplu, când vrem să folosim caractere speciale (\n, \r, etc.), dar mai multe despre ele puțin mai târziu.

De asemenea, este de remarcat faptul că utilizarea ghilimele simple + concatenare face codul mult mai lizibil decât dacă totul ar fi pus fără discernământ între ghilimele duble. Dar destule prefațe, acum vei vedea și înțelege totul pentru tine:

$numar = 2; //intger $hand1 = "Numarul de maini pe care le are o persoana:"; //șir + faceți-l să fie analizat pentru variabile$hand2 = „Numărul de mâini pe care o persoană le are:”; //şir
//adăugați variabila $number la aceste linii:$hand1 = "Numarul de maini pe care le are o persoana: $numar si mai mult text..."; // NOT recomandat $hand2 = "Numar de maini pe care le are o persoana: " . $numar. „și mai mult text...”; // Vă recomand!
echo $hand1, "
", $hand2; ?>

Rezultat:

Vom vorbi mai multe despre concatenare în articolul următor.

  • i s-a atribuit o constantă NUL.
  • nu i s-a atribuit încă niciun sens.
  • a fost eliminat folosind unset()

Studierea tipurilor de variabile rămase în această etapă ar fi inutilă. Vom întâlni tipurile rămase și le vom analiza într-un studiu mai profund al PHP.

Evadare în PHP

Dar dacă nu vrem să obținem valoarea variabilei din linia noastră, dar vrem să scriem literal $număr? Să luăm în considerare două opțiuni:

$hand1 = "Numarul de maini pe care le are o persoana: \$numar si ceva text..."; // DO NOT recommend $hand2 = "Numărul de mâini pe care o persoană le are: $număr și ceva text..."; // Vă recomand!
echo $hand1, "
", $hand2; ?>

Rezultat:

În prima versiune (cu ghilimele duble), am folosit evadarea caracterului special dolar, datorită căruia acest caracter special a încetat să mai aibă scopul său special (desemnare variabilă) și s-a transformat într-un semn dolar obișnuit.

În a doua opțiune (cu ghilimele simple), după cum știți deja, interpretul PHP nici măcar nu a încercat să găsească variabile în linie și, prin urmare, nu a fost necesară evadarea.

Caractere speciale în PHP

Mai ales pentru cititorii blogului Site pe! Am pregătit o mică listă de caractere speciale în limbajul de programare PHP:

  • \n linie nouă
  • \r retur carucior
  • \t filă orizontală
  • \\ backslash (backslash)
  • \$semnul dolarului
  • \" citat dublu

Să ne uităm la munca caracterelor speciale folosind exemplul \n - un caracter special care face o linie nouă (cum ar fi Enter), dar browserele nu o înțeleg (și nu ar trebui) să o înțeleagă și să-l ignore, dar rezultatul muncii sale poate se vede in codul sursa al paginii:

echo $rule, "
", $rule2; ?>

Rezultat:

Cod sursă (Ctrl + U):

Dacă caracterul special \n nu este afișat în niciun fel pentru vizitatori în browser, atunci care este semnificația acestuia?

În primul rând, folosind caractere speciale și \n în special, puteți formata convenabil codul de pe pagină (ca în exemplul de mai sus).

În al doilea rând, \n poate fi folosit, de exemplu, în timpul operațiunilor de scriere într-un fișier, pentru a face un wrap (Enter) și a continua scrierea pe o nouă linie.

O alternativă la această formatare este .

Sintaxa Heredoc în PHP

Rezultat:

Cod sursă (Ctrl + U):

Rezultatul vorbește de la sine, acum să ne dăm seama cum funcționează totul:

  • Linia începe cu trei paranteze unghiulare<<<, далее следует имя идентификатора.
  • Linia cu identificatorul de deschidere (eticheta) nu trebuie să conțină în niciun caz alte caractere după ea, inclusiv un spațiu. Adică, cu alte cuvinte, imediat după marca noastră trebuie să punem Enter, fără spațiu, imediat Enter!

Un șir în PHP este un set de caractere de orice lungime. Spre deosebire de C, șirurile pot conține și caractere nule, care nu vor afecta în niciun fel programul. Cu alte cuvinte, șirurile pot fi folosite pentru a stoca date binare. Lungimea șirului este limitată doar de cantitatea de RAM liberă.

În PHP, un caracter este același cu un octet, ceea ce înseamnă că sunt posibile exact 256 de caractere diferite. Aceasta înseamnă, de asemenea, că PHP nu are suport nativ Unicode. Unele suport Unicode este oferit de funcții utf8_encode()Și utf8_decode() .

Șirul poate fi procesat cu ușurință folosind funcții standard și, de asemenea, puteți accesa direct oricare dintre caracterele sale.

Un exemplu simplu de variabilă șir:

$a= „Este doar text stocat într-o variabilă șir”;
echo $a ; //Ieșire „Acesta este doar text scris într-o variabilă șir”
?>

Acum să ne uităm la sintaxa tipului de date în detaliu. şir.

Sintaxa tipului șirului

Un șir poate fi definit în trei moduri diferite.

Cel mai simplu mod de a defini un șir este de a-l încadra între ghilimele simple (simbolul " ).

Pentru a utiliza un singur ghilimele într-un șir, ca în multe alte limbi, acesta trebuie să fie precedat de un caracter backslash ( \ ), adică ecranați-l. Dacă bara oblică inversă trebuie să fie înaintea unui singur ghilimeleu sau să fie la sfârșitul rândului, trebuie să o duplicați. Rețineți că dacă încercați să scăpați de orice alt caracter, bara oblică inversă va fi tipărită și! Deci, în general, nu este nevoie să scăpați de backslash în sine.

Spre deosebire de celelalte două sintaxe, variabile și secvențe de evacuare pentru caracterele speciale care apar în șiruri de caractere incluse în, Nu sunt în curs de procesare.

Iată un exemplu de utilizare a ghilimelelor simple:

ecou „acesta este un șir simplu”;

Ecou „De asemenea, puteți introduce în rânduri
caracter newline astfel,
pentru ca e normal"
;

// Ieșire: Arnold a spus odată: „Mă întorc”
ecou „Într-o zi, Arnold a spus: „Mă întorc”.;

Ecou „Ați șters C:\\*.*?”;

// Ieșiri: Ați șters C:\*.*?
echo "Ați șters C:\.*.*?" ;

// Ieșire: Aceasta nu va insera: \n linie nouă
ecou „Acest lucru nu va insera:\nnewline”;

// Ieșiri: $expand și $orice variabile nu sunt înlocuite
ecou „$expand și $fither variabilele nu sunt înlocuite”;
?>

Dacă șirul este cuprins între ghilimele duble ( " ), PHP recunoaște mai multe secvențe de escape pentru caractere speciale:

Tabelul secvenței de control:

Urmare Sens
\n linie nouă (LF sau 0x0A (10) în ASCII)
\r întoarcere transport (CR sau 0x0D (13) în ASCII)
\t filă orizontală (HT sau 0x09 (9) în ASCII)
\\ backslash
\$ semnul dolarului
\" citat dublu
\{1,3} o secvență de caractere corespunzătoare unei expresii regulate, un caracter din sistemul numeric octal
\x(1,2) secvență de caractere corespunzătoare expresiei regulate, caracter în sistemul numeric hexazecimal

Să ne amintim din nou că, dacă doriți să mnemonizați orice alt caracter, va fi tipărită și bara oblică inversă!

Un alt mod de a defini șiruri este de a folosi sintaxa heredoc ("<<< "). După<<< необходимо указать идентификатор, затем идет строка, а потом этот же идентификатор, закрывающий вставку.

Identificatorul de închidere trebuie să înceapă în prima coloană a rândului. În plus, identificatorul trebuie să urmeze aceleași reguli de denumire ca toate celelalte etichete din PHP: să conțină doar caractere alfanumerice și un caracter de subliniere și trebuie să înceapă cu o non-cifră sau un caracter de subliniere.

Atenţie! Este foarte important de reținut că linia de identificare de închidere nu conține alte caractere, cu excepția poate un punct și virgulă ( ; ). Aceasta înseamnă că identificatorul și că nu pot exista spații sau file înainte sau după punct și virgulă. De asemenea, este important să înțelegeți că primul caracter înainte de identificatorul de închidere trebuie să fie un caracter de linie nouă așa cum este definit de sistemul dvs. de operare. De exemplu, pe Windows® aceasta este \r.

Dacă această regulă este încălcată și identificatorul de închidere nu este „curat”, identificatorul de închidere este considerat lipsă și PHP va continua să-l caute în continuare. Dacă în acest caz nu se găsește niciodată identificatorul de închidere corect, va provoca o eroare la procesare cu numărul de linie de la sfârșitul scriptului.

Heredoc-textul se comportă la fel ca un șir între ghilimele duble, fără a le avea. Aceasta înseamnă că nu trebuie să evadați ghilimele din heredoc, dar puteți utiliza în continuare secvențele de escape de mai sus. Variabilele sunt procesate, dar trebuie să fiți la fel de atenți când utilizați variabile complexe în heredoc ca și atunci când lucrați cu șiruri.

Exemplu de definire a unui șir heredoc:

$str =<<Linie de exemplu,
acoperind mai multe linii,
folosind sintaxa heredoc.
EOD;

/* Exemplu mai complex cu variabile. */
clasa foo
{
var $foo ;
var $bar ;

Funcția foo()
{
$this -> foo = "Foo" ;
$this -> bar = array("Bar1" , "Bar2" , "Bar3" );
}
}

$foo = new foo();
$name = "Numele meu" ;

Ecou<<Numele meu este "$name". Tastesc $foo-> foo.
Acum deduc
( $foo -> bar [ 1 ]) .
Aceasta ar trebui să scoată o literă majusculă „A”:
\x41
EOT;
?>

(PHP 4, PHP 5, PHP 7)

htmlspecialchars — Convertește caracterele speciale în entități HTML

Descriere

Şir htmlspecialchars (șir $șir [, int $flags = ENT_COMPAT | ENT_HTML401 [, șir $encoding = ini_get("default_charset") [, bool $double_encode = adevărat ]]])

În HTML, unele caractere au semnificații speciale și trebuie reprezentate ca entități HTML pentru a-și păstra sensul. Această funcție returnează șirul care a suferit aceste conversii. Dacă trebuie să convertiți toate entitățile posibile, utilizați htmlentities().

Dacă șirul de intrare a trecut la această funcție și documentul rezultat utilizează aceeași codificare de caractere, atunci această funcție este suficientă pentru a pregăti datele pentru inserarea în majoritatea părților documentului HTML. Cu toate acestea, dacă datele conțin caractere care nu sunt definite în codificarea caracterelor documentului rezultat și vă așteptați ca acele caractere să fie stocate (ca entități numerice sau numite), atunci aceasta și htmlentities() funcții (care transformă doar subșiruri cu entități corespunzătoare). Este necesar să utilizați funcția mb_encode_numericentity().

Se fac următoarele transformări:

  • „&” (ampersand) este convertit în „&”
  • „”” (ghilimele duble) este convertit în „”” în mod ENT_NOQUOTES nu este setat.
  • „”” (ghilimele simple) este convertit în „”” (sau „) numai în mod ENT_QUOTES.
  • "<" (знак "меньше чем") преобразуется в "<"
  • „>” (mai mare decât semnul) este convertit în „>”

Lista parametrilor

Șir de convertit ( şir).

O mască de biți a următoarelor steaguri care determină modul de procesare a citatelor, codificări incorecte și tipul de document utilizat. Implicit este ENT_COMPAT | ENT_HTML401.

Valorile parametrilor steagurilor disponibile
Nume constant Descriere
ENT_COMPAT Convertește ghilimele duble, lăsând ghilimele simple neschimbate.
ENT_QUOTES Convertește atât ghilimele duble, cât și cele simple.
ENT_NOQUOTES Lasă neschimbate atât ghilimele duble, cât și cele simple.
ENT_IGNORE Fără mesaje de notificare, elimină secvențele de cod nevalide în loc să returneze un șir gol. Utilizarea acestui semnalizare nu este recomandată deoarece poate duce la » implicații negative de securitate.
ENT_SUBSTITUTE Înlocuiește secvențele de cod incorecte cu caracterul de înlocuire Unicode U+FFFD când se utilizează UTF-8 și FFFD; atunci când utilizați o codificare diferită, în loc să returnați un șir gol.
ENT_DISALLOWED Înlocuiește codurile de caractere nevalide pentru un anumit tip de document cu caracterul de înlocuire Unicode U+FFFD (UTF-8) sau FFFD; (când utilizați o codificare diferită) în loc să lăsați totul așa cum este. Acest lucru poate fi util, de exemplu, pentru a vă asigura că documentele XML cu conținut extern încorporat sunt corecte din punct de vedere formal.
ENT_HTML401 Procesarea codului în conformitate cu HTML 4.01.
ENT_XML1 Procesarea codului în conformitate cu XML 1.
ENT_XHTML Procesarea codului în conformitate cu XHTML.
ENT_HTML5 Procesarea codului în conformitate cu HTML 5.
codificare

Un argument opțional care specifică codificarea utilizată la conversia caracterelor.

Dacă nu este specificată, valoarea implicită pentru codificare depinde de versiunea PHP utilizată. În PHP 5.6 și mai vechi, valoarea implicită este setată la opțiunea de configurare default_charset. În PHP 5.4 și 5.5 este folosit UTF-8 Mod implicit. Versiunile anterioare ale PHP folosesc ISO-8859-1.

Deși acest argument este opțional din punct de vedere tehnic, este foarte recomandat să specificați valoarea corectă pentru codul dvs. dacă utilizați PHP 5.5 sau o versiune superioară, sau dacă opțiunea de configurare default_charset poate fi setată incorect pentru intrare.

În scopul acestei funcții de codificare ISO-8859-1, ISO-8859-15, UTF-8, cp866, cp1251, cp1252Și KOI8-R sunt practic echivalente, presupunând că șirul în sine conține caractere valide în codificarea specificată, apoi caracterele fiind modificate htmlspecialchars(), va rămâne în aceleași locuri în toate aceste codificări.

Sunt acceptate următoarele codificări:

Codificări acceptate
Codificare Porecle Descriere
ISO-8859-1 ISO8859-1 vest-european latină-1.
ISO-8859-5 ISO8859-5 Codificare chirilică folosită rar (latină/chirilic).
ISO-8859-15 ISO8859-15 vest-european latină-9. Adaugă semnul euro, litere franceze și finlandeze la codificarea Latin-1 (ISO-8859-1).
UTF-8 Unicode pe 8 biți, compatibil ASCII.
cp866 ibm866, 866 Codificare chirilică utilizată în DOS.
cp1251 Windows-1251, win-1251, 1251 Codare chirilică utilizată în Windows.
cp1252 Windows-1252, 1252 Codificarea Europei de Vest folosită în Windows.
KOI8-R koi8-ru, koi8r codificare rusă.
BIG5 950 Chineză tradițională, folosită în principal în Taiwan.
GB2312 936 Chineză simplificată, set de caractere național standard.
BIG5-HKSCS Big5 extins folosit în Hong Kong.
Shift_JIS SJIS, SJIS-win, cp932, 932 Codificare japoneză.
EUC-JP EUCJP, eucJP-win Codificare japoneză.
MacRoman Codificare utilizată în Mac OS.
"" O linie goală activează modul de determinare a codificării din fișierul script (Zend multibyte), default_charset și localitatea curentă (vezi. nl_langinfo()Și setlocale()), în ordinea arătată. Nu este recomandat pentru utilizare.

cometariu: Alte codificări nu sunt acceptate; codificarea implicită va fi aplicată în schimb și va fi generat un avertisment.

double_encode

Dacă opțiunea double_encode este dezactivată, atunci PHP nu va converti entitățile html existente. În mod implicit, totul este convertit fără restricții.