View previous topic :: View next topic |
Author |
Message |
gordan
Joined: 24 Feb 2007 Posts: 17
|
Posted: 26.02.2007 13:18 Post subject: PHP - strftime problem na Windowsima |
|
|
Windows XP-SP2 ("naša" slova svugdje uredno rade i svuda di se može je stavljeno Croatia)
Apache 1.3
PHP 5.2 (ponovo, "naša" slova svugdje funkcioniraju besprijekorno (gettext, generiranje PDFova, MySQL ... dakle sve bez ikakvih problema)
ali evo problema:
Code: | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head><body>
<?php
setlocale(LC_ALL, 'hrv_HRV');
echo strftime("%B") . '<br />';
echo utf8_encode(strftime("%B"));
>
</body></html> |
daje output:
velja?a (upitnik umjesto č)
veljaea (e sa umlautom umjesto č)
Naravno, na Unixima stvar radi besprijekorno. Pretražio sam Net uzduž i poprijeko ali nisam uspio nać rješenje koje bi podesilo environment (bilo sam PHP bilo Windowse) da strftime izbaci string kodiran u UTF8. Pronašao sam nekoliko registriranih bugova koji potvrđuju da strftime ne daje UTF8.
Na stranu što bi ja htio znat kako ovo elegantno riješit imam komad softvera sa beskonačno mnogo strftimeova() i ne bi baš volio radit sear-replace-all s nekom drugom funckijom koja bi radila nekakav strreplace ili nešto u tom stilu.
Promjena charseta je također gotovo pa nemoguća misija jer je sve na UTF8 pa .....
Ako netko ima neke ideje/prijedloge unaprijed zahvaljujem |
|
|
Back to top |
|
|
matun
Joined: 19 Feb 2007 Posts: 23
|
Posted: 26.02.2007 17:41 Post subject: |
|
|
Da li možda imaš problema s BOM-sigom radi UTF-a? Naime, UTF ima ružnu naviku stavljati gluposti na početke svakog fajla koji je UTF-encoded pa to zna raditi probleme s encodingom poslije.
Najjednostavnije ti je provjeriti da li je to tako što jednostvno edit.com-om otvoriš fajl na koji sumnjaš i potražiš hijeroglife na _samom početku_ koda. Ako postoje, BOM radi frku.
Ako je to, probaj stvar riješiti BOM-removerom...
P.S. U "obicnim" editorima ti se hijeroglifi znaju ne prikazivati, pa zato potreba za provjerom u edit.com-u |
|
|
Back to top |
|
|
gordan
Joined: 24 Feb 2007 Posts: 17
|
Posted: 26.02.2007 18:00 Post subject: |
|
|
"strftime.php - nema bom" thanks na ideji al nije pomoglo ;-(
koristim Zend Studio pa se nadam da ipak prikazuje takve stvari |
|
|
Back to top |
|
|
gog
Joined: 18 Jun 2004 Posts: 679 Location: zagreb
|
Posted: 27.02.2007 13:33 Post subject: |
|
|
Je si li poslao utf-8 header?
Ubaci
Code: | header("Content-type: text/html; charset=UTF-8"); |
na početku skripte |
|
|
Back to top |
|
|
gordan
Joined: 24 Feb 2007 Posts: 17
|
Posted: 27.02.2007 15:36 Post subject: |
|
|
gog wrote: | Je si li poslao utf-8 header? |
probao sam i to, ništa
Firefox uredno kaže da je encoding UTF-8 i header je 100% poslan
echo "šđčćž"; uredno daje naša slova, a i ako napišem u samom dokumentu naša slova sve se uredno vidi. samo taj strftime zajebava
PS
poprilično sam uvjeren da se to ne može jer ne vidim takvu funkciju u manualu, al ... jel bi mogo ubit originalni strftime i overrideat ga svojom funkcijom? |
|
|
Back to top |
|
|
zytzagoo mi3.crew
Joined: 25 Aug 2003 Posts: 1842 Location: Zagreb, Hrvatska
|
Posted: 27.02.2007 20:13 Post subject: Re: PHP - strftime problem na Windowsima |
|
|
Code: | <?php
echo iconv('iso-8859-2', 'UTF-8', strftime("%B"));
?> |
S tim da to nije riješenje... nego dosta zajebani workaround, budući da moraš tražiti sve occurence strftime()-a, a ne možeš ga re-definirati jednostavno...
Prvenstveno mi se čini da je problem u tome što setlocale() postavlja interno enkoding na iso-8859-2 izgleda, umjesto na utf-8, ali to je i za očekivati, budući da će kompletna native utf podrska doci tek valjda u PHPu 6...
Na *nixu bi mozda moglo proci nesto tipa: Code: |
<?php
setlocale(LC_ALL, 'hr_HR.UTF-8');
?>
|
Ovisno o tome da li postoji taj locale.... ali na Windowsima... no klu za sad... probam google-at malo pa javim ako nadjem stogod... |
_________________ [+]I[+]am[+]my[+]own[+]religion[+] |
|
Back to top |
|
|
zytzagoo mi3.crew
Joined: 25 Aug 2003 Posts: 1842 Location: Zagreb, Hrvatska
|
Posted: 27.02.2007 20:21 Post subject: |
|
|
Wierd shit... ako se napravi samo:
Code: | setlocale(LC_TIME, 'hrv_HRV'); |
na windowsima... Onda Code: | echo strftime("%B"); |
vraca "veljaca"... |
_________________ [+]I[+]am[+]my[+]own[+]religion[+] |
|
Back to top |
|
|
zytzagoo mi3.crew
Joined: 25 Aug 2003 Posts: 1842 Location: Zagreb, Hrvatska
|
|
Back to top |
|
|
gordan
Joined: 24 Feb 2007 Posts: 17
|
Posted: 27.02.2007 21:58 Post subject: |
|
|
Apsolutno jedini locale string koji radi na Windowsima je "hrv_HRV", probao sam ih valjda 100.
O internom hendlanju sam dosta čitao na PHP bug listama i ovisno o localeu događa se svašta.
Mislim da mi neće preostat ništa drugo nego zamjenit sve strftime sa strftime2 i onda to nekako sredit, al čisto me strah toga jer aplikacije je ogromna i takav brutalni search&replace je zbilja ružno rješenje.
@zytzagoo hvala na trudu! |
|
|
Back to top |
|
|
zytzagoo mi3.crew
Joined: 25 Aug 2003 Posts: 1842 Location: Zagreb, Hrvatska
|
Posted: 28.02.2007 10:47 Post subject: |
|
|
gordan wrote: | Mislim da mi neće preostat ništa drugo nego zamjenit sve strftime sa strftime2 i onda to nekako sredit, al čisto me strah toga jer aplikacije je ogromna i takav brutalni search&replace je zbilja ružno rješenje. |
Nema druge izgleda, ako se mora vrtiti na windowsima...
I nemoj sa strftime2, jer ce ti kasnije biti teze jos... zamijeni sa hrv_strftime() ili sl
S nekim pristojnim text editorom to ti je ravno 5min posla |
_________________ [+]I[+]am[+]my[+]own[+]religion[+] |
|
Back to top |
|
|
gordan
Joined: 24 Feb 2007 Posts: 17
|
Posted: 01.03.2007 17:43 Post subject: |
|
|
2 min posla da se izvrti 429 fileova
dakle sada imam naša slova i skinuo sam si konačno ženske iz računovodstva sa grbače koje nisu htjele koristit novu aplikaciju samo zbog toga (ne ne šalim se! i kladim se da će uskoro nać neko drugo opravdanje da me gnjave)
nadam se da će problem biti rješen kako spada u PHP6
@zytzagoo thanks još jednom |
|
|
Back to top |
|
|
|