detectare automată și corectare automată de codificare în PHP

Modificarea site-ul recente nu este motorul foarte buna, am dat peste o problemă cu codificarea de siruri de caractere. Descărcarea datelor din fișierul XML primit păsăreasca lor și este problemele jumătate. O parte din liniile necesare pentru a converti un utf-8 și o parte din CP1251. După cum sa dovedit, știm un creator al fișierului XML, dar lucrarea nemenee a trebuit să fie făcut. Și apoi am vizitat o idee interesantă - pentru a scrie o funcție care se definește de ceea ce este necesar să se transforme într-un șir de caractere în mod automat și de a face asta. La ieșire revine la o formă care poate fi citit linie normală.

A început o rapidă perne cum să-l pună în aplicare. Am găsit o mulțime de articole pentru codificarea auto-detecție. dar acestea sunt limitate la un anumit set de codificări. Pentru a adăuga un alt, era necesar să se deranjeze nici o gluma. Așa că am decis să fac următoarele:

  • Funcția trimite un șir de caractere codificate cu bâta.
  • In interiorul functiei, există o matrice cu toate codificări posibile. Dacă este necesar, extinde gama de posibile codificări, trebuie doar să-l adăugați la matrice.
  • În plus, există un șir de matrice codificări pentru rezultat comparație (în acest caz, cu litere mici meu alfabet românesc). Apoi, cred că începe să ghicească cum funcționează funcția.
  • Funcția returnează un șir de caractere în codificarea normală.

Mai jos este codul complet pentru funcția:

imediat spun, sa dovedit bun, dar toate aceeași carja. În cazul meu, nu nirazu rezumat, am lucrat la 100%. Ea, de asemenea, frumos de a folosi la Cribs ICQ muncă în PHP.

Poate că funcția este un pic mai intens de resurse, astfel încât să accelereze activitatea sa ar trebui să reducă posibile codificări. Acest lucru va crește în mod semnificativ viteza programului. Totuși este posibil să se reducă șirul pentru a căuta meciuri, deoarece este de multe ori toate se deplasează într-o buclă, dar nu aș recomanda, deoarece probabilitatea de a găsi codificarea corectă este semnificativ redusă.

Mai mult pentru codificarea corecție corespunzătoare. serverul trebuie să ruleze biblioteca inconv. Din fericire, pe cele mai multe servere este instalat în mod implicit.

Funcția corectează în mod corespunzător de codificare în PHP, cu o probabilitate de 95%.

Acum, să vedem cum funcționează la fel.

Mai întâi de toate codificări posibile deplasate matrice și fiecare element la rândul său, încearcă să transforme linia curbă de codificare unul cu celălalt în matrice. După aceea, șirul de caractere rezultat sunt considerate un meci cu un șir de comparație, rezultatele sunt adăugate la matrice. Matricea este sortat de câmp la numărul de coincidență este luată și rezultatul simbolurilor decodificare cu cea mai mare coincidență.

Este foarte simplu, și așa cum se arată, această funcție funcționează în aproape toate situațiile. Trebuie doar să completați corect codificări o matrice verotnyayh.

Acum, dacă doriți să corectați codarea liniei în PHP. Hraneste simpla linie curba funcției, și se va întoarce la tine este în formă normală.

Această funcție este detectarea automată a lucrărilor de codificare pe mai multe magazine online reale descărca fișierul XML. Poate că ar trebui să modifice că verificat la începutul a ceea ce linia a fost trimis, așa că, dacă acesta a fost trimis într-o linie normală, se oprește și nu fir cu plumb, încă o dată pe server, dar experiența a arătat că linia normală a normale și înapoi, și, în general, că -A fost leneș;).

Moduri de a rezolva problema cu codificarea în PHP mult, dar este carja mea personală care, în opinia mea, una dintre cele mai bune opțiuni. Poate că greșesc, dar până în prezent nu a existat nici un motiv să se îndoiască.