Php cum să eliminați BOM în WordPress
Una dintre problemele folosind codarea UTF-8 - eticheta BOM. Această măsură este necesară pentru a separa etichete de altele UTF. codificări, dar în cazul UTF-8, aceasta poate duce la mai multe probleme, deci este mai bine să renunțe la BOM cod. Cum de a face acest lucru?
Șterge BOM în Notepad ++
Ștergeți mijloace BOM PHP
Atunci când există mai multe fișiere, să le lopata în Notepad ++ pentru o lungă perioadă de timp. Pur și simplu utilizați o procesare recursiv php-script de foldere și fișiere pentru a șterge marcajul BOM. L-am împărțit în trei funcții:
1. Funcția file_has_boom ($ filename) - verifică marca BOM în fișierul $ numele fișierului.
Funcția file_has_bom ($ filename) $ fh = fopen ($ filename, 'r');
if ($ fh === false) return false;
$ Str = fread ($ fh, 3);
fclose ($ fh);
întoarcere ($ str == pachet ( 'CCC', 0xef, 0xbb, 0xbf));
>
Ea citește primele 3 octeți din fișierul $ numele de fișier și le compară cu valoarea BOM etichetei. Dacă există un singur - returnează TRUE. în caz contrar - FALS.
2. Funcția file_remove_bom ($ filename) - șterge primii 3 octeți (sub eticheta BOM) în fișierul.
Funcția file_remove_bom ($ filename) $ str = file_get_contents ($ filename);
if ($ str === false) return false;
$ Str = substr ($ str, 3);
reveni file_put_contents ($ filename, $ str);
>
Dacă deschideți sau suprascrie fișierul nu a reușit, funcția va returna FALSE. altfel &mdah; numărul de octeți înregistrate (nu TRUE).
3. dir_remove_bom Funcția ($ dir) - face ca procesarea recursiv de foldere și fișiere, verificați fișierele de etichete BOM și eliminarea acestora din ele.
Funcția dir_remove_bom ($ dir) $ dh = opendir ($ dir);
if ($ dh === false) die (dir $“. - EROARE DIR„);
în timp ce (! ($ file = readdir ($ dh)) == false) if ($ == fișier sau un fișier $ == '..' ''.) continuă;
$ Filename = $ dir. '/'. Fișier $;
în cazul în care (is_dir ($ filename)) dir_remove_bom ($ filename);
> Elseif (is_file ($ filename)) în cazul în care (file_has_bom ($ filename)! == false) echo $ nume de fișier. ' -“. ((File_remove_bom ($ filename)! == false). "ELIMINAȚI BOM“. 'EROARE FILE„). '
„;
>
>
>
closedir ($ dh);
>
Notă: Această funcție afișează o listă de fișiere care au avut BOM marca și rezultatul eforturilor sale de a elimina.
Pot fi folosite și funcția glob (). dar am aflat despre asta abia când am început să se ocupe de modul de a șterge un fișier în php - Din păcate.
Scoaterea BOM fișierelor WordPress
Ce face WordPress? Faptul că WordPress utilizează codificare UTF-8, și a propus php-scenariu a fost scris pentru el.
Pe Internet, există o decizie din partea Juriului Belotitskogo. dar găsește numai fișierele problemă, și nu elimină eticheta BOM (acest lucru trebuie să fie făcut manual, folosind același Notepad ++).
De la plusuri este demn de remarcat restrictie - filtre .php numai fișiere, este corect și accelerează procesul. În decizia mea nu este, dar nu a fost adăugată dificil:
în cazul în care (strstr ($ filename, '.php') === false) continuă;
Adăugați acest cod înainte de a verifica disponibilitatea mărcii în fișierul BOM, adică linia ..:
în cazul în care (file_has_bom ($ filename)! == false)
Ei bine t.-k. cea mai mare parte a problemei este legată de template-uri, este suficient pentru a verifica ./wp-content/themes/ dosar - cu php-script-ul trebuie să fie localizat în directorul rădăcină al blogului și procesarea apelul va fi:
În plus, puteți specifica locația subiectului în sine, care restrânge și mai mult gama de fișiere procesate.
BOM și rezultate
Soluții pentru problema sunt multe. Viitorul UTF-codificări! Dar, în timp ce există dificultăți cu UTF, este recunoscut faptul că codificarea Windows 1251 (ANSI) are un aspect mult ca preferat.
P.S. Eu nu sunt responsabil pentru consecințele utilizării de mai sus php-script pentru a elimina BOM.
Vă mulțumesc, deși ambele mers la PhpStorm deja uitat ce BOM. Și ceea ce este opendir uitat deja după care apar în PHP SPL și iteratori fișiere.
Despre PHP SPL, nu cred că oul în profil arata ca altceva. Eu folosesc ceea ce am fost familiar, dar sunt de acord - este necesar să se țină pasul cu inovațiile. în cazul în care există o dorință :-)
Specialist web # 8209; un designer, dezvoltator, optimizator, copywriter, blogger și doar un om bun.