Add to Google Reader or Homepage Prihlásiť sa k odberu RSS

| Rubrika Php / mysql

Diskusia k článku

Odstránenie diakritiky v PHP pomocou iconv()Zobraziť článok

vasava
Dátum a čas 01. 06. 2009, 01:14

Ja pre zmenu používam niečo takéto:

function seo($url)
{
$url = stripslashes($url);
$url = str_replace(
explode(',','á,ä,č,ď,é,ě,ë,í,ĺ,ľ,ň,ó,ö,ô,ř,š,ť,ú,ů,ü,ý,ž,Á,Ä,Č,Ď,É,Ě,Ë,Í,Ĺ,Ľ,Ň,Ó,Ö,Ô,Ř,Š,Ť,Ú,Ů,Ü,Ý,Ž, '),
explode(',','a,a,c,d,e,e,e,i,l,l,n,o,o,o,r,s,t,u,u,u,y,z,a,a,c,d,e,e,e,i,l,l,n,o,o,o,r,s,t,u,u,u,y,z,-'),
$url);
$url = strtolower($url);
$url = preg_replace('/[^-a-z0-9]/','-',$url);
$url = preg_replace('/-+/','-',$url);
$url = trim($url,'-');

return $url;
}

Greeg
Dátum a čas 23. 05. 2009, 18:42 E-mail greegus.virere [a] gmail.com

to uz rovno mozem userovi co tam zada diakritiku klepnut po palcoch perlikom ;) ja teraz pouzivam strtr() a pole Č=>C... ale imho buil-in fnc by asi bola rychlejsia

masko
Dátum a čas 21. 05. 2009, 08:52

hm, radsej ako hladat problem odstran tie apostrofy pomocou str_replace() .. :)

Greeg
Dátum a čas 21. 05. 2009, 00:51 E-mail greegus.virere [a] gmail.com

da sa povedat ze to funguje krasne ale moj retazec "ľščťžýáíé" premiena na "lsctz'y'a'i'e". kod je v utf8, php 5.2.6

Naspäť naspäť

Pridať komentár

Koľko je na ruke prstov?

Náhľad článku

Odstránenie diakritiky v PHP pomocou iconv()

Odstránenie diakritiky z reťazcov, pri použítí kódovania UTF-8, ktoré by dnes malo byť už takmer štandardom je relatívne jednoduché a dá sa využiť natívna PHP funkcia iconv(). Tá funguje tak, že prevedie reťazec z jedného kódovania na iné – v prípade, že chceme odstrániť diakritiku, meníme kódovanie z UTF-8 na ASCII.

<?
$text = iconv('UTF-8', 'ASCII//TRANSLIT', $text);
?>

Táto funkcia funguje väčšinou spoľahlivo, ale môže sa stať, že na niektorom webhostingu funguje korektne, na inom je však problém v tom, že niektoré diakritické znaky nahrádza otáznikmi. Túto chybu spôsobouje použitie knižnice glibc namiesto správnejšej libiconv.
Keďže dovolať sa nainštalovania inej knižnice, je na väčšine zdieľaných webhostingoch takmer nemožné, je dobré poznať riešenie, ktoré donúti funkciu iconv() fungovať tak ako má, aj keď je použitá knižnica glibc.
Kľúčom je použitie funkcie setlocale ešte pred zavolaním iconv, ktorá zabezpečí jej správne interpretovanie a odstráni „bug“ s otáznikmi.

<?
setlocale(LC_CTYPE, "sk_SK.utf-8");
$text = iconv('UTF-8', 'ASCII//TRANSLIT', $text);
?>
RSS