Diacritice cu virgulă și sedilă, sau cum să împaci capra și varza
January 6, 2009 – 9:11 amCei care lucrați în domeniul web cunoașteți foarte bine sentimentele de mânie, frustrare și ură – trăite pe rând, sau toate o dată – ce apar în momentul în care deschideți un IE6 pentru a testa un site proaspăt terminat.
Ultima problemă legată de IE6 ține de afișarea incorectă a diacriticelor cu virgulă. Problema asta îmi era practic necunoscută acum vreo 6 luni de zile, deoarece layout-urile tastaturilor românești conțineau diactitice cu sedilă (pe linux, cel puțin). Diferența?
Layout nou: ș, Ș, ț, Ț (afișat incorect)
Layout vechi: ş, Ş, ţ, Ţ (afișat corect)
Aici pe blog puțin îmi pasă dacă mai sunt oameni navigând cu IE6 care nu văd textul corect. Însă pe alte site-uri îmi pasă, pentru că fiecare utilizator poate deveni client. Prin urmare, a trebuit să caut o soluție.
Fiind vorba de un site scris în PHP, soluția a ieșit imediat la iveală și se bazează pe funcționalitatea de output buffering despre care am mai scris aici.
Și acum, codul responsabil cu afișarea diacriticilor cu sedilă în locul celor cu virgulă (doar pentru IE6):
function inlocuireDiacritice($buffer){ $cuVirgula = array("ș", "Ș", "ț", "Ț"); $cuSedila = array("ş", "Ş", "ţ", "Ţ"); return str_replace($cuVirgula, $cuSedila, $buffer); } function browserIE6(){ return strpos($_SERVER["HTTP_USER_AGENT"], "MSIE 6"); } if (browserIE6()){ ob_start("inlocuireDiacritice"); }else{ ob_start(); } ... ob_end_flush();


9 Responses to “Diacritice cu virgulă și sedilă, sau cum să împaci capra și varza”
Salut si eu am un site unde vreau sa scriu cu diacritice. Problema este ca nu sunt foarte tare la php. Am un magazin care foloseste Cubecart, ai putea sa imi spui unde anume sa adaug codul scris de tine? Multumesc
By Marius on Feb 15, 2010
Salut Marius.
Nu am lucrat deloc cu Cubecart si nu stiu cum e construit.
Un magazin serios ar trebui sa foloseasca output buffering, deci poti sa faci o cautare in cod dupa ob_start si ob_end_flush.
Daca nu gasesti… probabil exista niste fisiere de genul header.php si footer.php.
In footer.php ar trebui pusa ultima linie, adica ob_end_flush() iar in header.php ar trebui restul.
–
Daca esti interesat, pot sa-ti ofer platforma pe care e bazat magazinul http://www.sosetaria.ro/
By Mihai Brehar on Feb 16, 2010
Merci mult pentru informatii. Cubecart se pare ca nu are output buffering, intrucat nu am gasit fisierele de care voorbeai, dar are marele avantaj ca este gratuit si exista o comunitate destul de mare de utilizatori unde gasesti skinuri, tot soiul de moduri si ajutor aproapte la orice problema. Mi-am adaptat interfata in romana (de care sunt tare multumit
). Nu am dat drumul magazinului, dar poti baga un click, daca vrei sa vezi cum va arata. M-ar interesa totusi si platforma pe care o folosesti. Te-as mai intreba cum ai reusit sa afisezi preturile cu virgula si nu cu punct, in sistem anglosaxon. Exista vreun cod anume?
Cat despre codul pus de tine, il voi baga si la blogul meu pe Wordpress.
Multumesc inca o data pentru raspuns, mi-ai fost de mare ajutor si succes cu magazinul.
By Marius on Feb 16, 2010
Salut,
M-am uitat putin peste codul CubeCart.
Trebuie sa incluzi cele doua functii (plus if/else) in
includes/ini.inc.php, la inceput.
Apelul catre ob_end_flush() trebuie sa-l incluzi in classes/xtpl.php in function out ($bname) dupa echo $out
Atentie!!! Nu am testat codul, doar am aruncat o privire si am dedus unde ar trebui introdus codul. Fa-ti un backup inainte sa modifici ceva.
–
Legat de pret, nu stiu cum e in CubeCart…
In mod normal, trebuie sa folosesti number_format() pentru a afisa pretul in modul dorit. Eventual il folosesti in combinatie cu setlocale() si localconv().
–
Daca esti interesat de platforma mea, o ofer ca serviciu, cu hosting si tot ce trebuie inclus, contra unei taxe lunare incepand cu 10 euro. Putem discuta mai mult pe mail/ymsg/telefon
By Mihai Brehar on Feb 16, 2010
Merci mult pentru informatii, abia astept sa ajung diseara acasa la ai mei (doar ei mai au IE6) ca sa testez.
By Marius on Feb 16, 2010
Bafta cu magazinul!
By Mihai Brehar on Feb 16, 2010
Salut, am adaugat codul cum ai spus si magazinul se vede in IE6. In Wordpress, pe FitClub, nu m-am descurcat. Am adugat un link spre blogul tau pe site-ul meu (FitClub), la sectiunea de vizitat, ca un fel de “Multumesc” pentru sprijinul pe car mi l-ai acordat
By Marius on Feb 17, 2010
Treaba asta e super!
Merge ci cu wordpress. Se modifica la theme ca sa fi sigur ca se inlocuieste tot.
Pui functiile in functions.php
si apoi in header inainte de orice output doar:
if (browserIE6()){
ob_start(“inlocuireDiacritice”);
}
si in footer dupa tot output-ul :
if (browserIE6()){
ob_end_flush();
}
Observati ca folosesc output buffering doar daca e browserIE6 altfel nu are rost pentru ca dauneaza ( utilizatorul are perceptia ca site-ul se incarca mai greu )
By Mihai Secasiu on Jul 15, 2010