| Rubrika Php / mysql
Diskusia k článku
Odstránenie diakritiky v PHP pomocou iconv()
vasava
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
23. 05. 2009, 18:42
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
21. 05. 2009, 08:52
hm, radsej ako hladat problem odstran tie apostrofy pomocou str_replace() .. :)
Greeg
21. 05. 2009, 00:51
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äť
Pridať komentár
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); ?>

