PHP, setlocale(), strftime() a UTF-8

Tak tu řeším jeden problém s locale a češtinou v UTF-8, a nemohu se k tomu dopracovat.

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'>
<html><body>
<?php
 setlocale(LC_TIME,$_GET['a']); 
 header('Content-Type: text/html; charset=utf-8');
 echo "<h1>".strftime("%A, %d.%m.%y",time())."</h1>";
?>
</body></html>

Problém je v tom, že pokud zadám do setlocale cokoliv jiného než czech, je vše anglicky. Toto všechno nefunguje:

Czech_Czech Republic.UTF8
Czech_Czech Republic.65001
Czech_Czech Republic.UTF-8
cs_CZ.utf8
czech.65001
Czech_Czech Republic.UTF 

Předpokládám, že řešení bude naprosto triviální, ale teď je prostě nevidím. Možnost je napsat iconv('iso8859-2','utf-8',strftime(..)), ale to není řešení koncepční.

Komentáře 6

  1. #1 paja

    Na Linuxu funguje cs_CZ.utf8, na Windows se mi nastavení najít nepodařilo.

  2. #2 Radek Hulán autor webu ▲10 ▼0

    [1] jenže mě cs_CZ.utf8 nefunguje ani na Linuxu... (webhost)

  3. #3 Petr

    Presne stejny problem mam i ja, ale uz mi nervy nevydrzely a proste sem ten iconv nakonec pouzil. 🙁

  4. #4 JohnyB

    Na linuxu potvrzuji cs_CZ.utf8, tam ho pouzivam (nema-li ho webhoster, ozvi se mu, prida to...), na win sem taky nezjistil. Podle msdn jsem neco zkusil, treba se i povede nastavit, ale napr. dny v tydnu to vraci stejne v cp1250. IMO utf pro php neni idealni - potebujes si z data vytahnout tri pismenka - misto "stř" dostanes "st?", pac "ř" zabira 3. a 4. znak ...

  5. #5 Radek Hulán autor webu ▲10 ▼0

    [4] cs_CZ.utf8 zjevně nemá povoleno xhost.cz, už jsem jim posílal email, potřebuji právě dny v týdnu (viz příklad nahoře).

    Ohledně funkce substr(), tu jsem si napsal znovu a lépe, aby počítala s UTF-8 😉

  6. #6 majkls

    jediná možnost je požádat je, ať vygenerujou locale pro UTF8.. což je otázka 5 minut... Musí na to být samozřejmě verze glibc (2.2.5 české UTF8 neumí, 2.3.2 už jo).