Problém s iconv - nefunguje odstranění diakritiky

14. 09 2011 | 09.47

Při práci na jednom projektu jsem zjistil, že způsob, jakým odstraňuji diakritiku mi sice na localhostu funguje, ale na serveru (hosting ONEbit.cz) nefunguje. Po chvilce hledání jsem ale zjistil příčinu.

Pár slov o použité technice...pro odstranění diakritiky používám triku s převodem kódování. Stačí převést řetěze z původního kódování do kódování, které diakritiku nezná. K tomu použijeme funkci iconv a k požadovanému kódování přidáme "//TRANSLIT" - díky tomu budou znaky, které kódování nezná vyměněny za znaky jim podobné. Toto řešení znám díky článku Vytvoření přátelského URL, které publikoval na svém blogu PHP Triky Jakub Vrána.

Až do teď mi fungovalo správně, ale při nahrání zdrojových kódů na hosting od ONEbit.cz mi funkce znaky začala vymazávat místo vyměňovat za jejich alternativy bez diakritiky. Ale díky fóru programujte.com - resp. díky tomuto komentáři jsem zjistil, že to je způsobeno použitou knihovnou pro php funkci iconv.

Pomocí phpinfo() lze zjistit, jestli používáte pro iconv knihovnu "libiconv" (překlad funguje správně) nebo knihovnu "glibc", kde překlad nefunguje tak, jak by měl. Pokud nemůžete server přenastavit, popisuje hrach ve svém komentáři alternativní řešení, které využívá řešení Davida Grudla.

Řešení, popsané v komentáři, jsem použil a vypadá to, že už vše funguje jak má.

Jelikož používám i hosting od Wedosu, tak jsem se podíval i na jejich výpis phpinfo a u něj by prozatím bylo také nutné použít alternativní řešení.

Zdroje:

PS: Napsal jsem do Wedosu i ONEbitu, jestli by bylo možné knihovnu glibc nahradit za libiconv. Očekával jsem, že hned to nebude, protože ani nevim, jestli to pak nemá vliv na jiné aplikace, což se potvrdilo odpovědí od Wedosu. Ti mi napsali, že požadavek přidali do TODO listu a po řádném otestování o tom budou uvažovat. ONEbit pravděpodobně o nahrazení neuvažují, protože mi odepsali, že standardně je dostupná právě knihovna "glibc" a při problémech se na ně mam obrátit.