Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Tomáš Jančík 29 Listopadu 2008, 17:09:15

Název: problém s php a diakritikou
Přispěvatel: Tomáš Jančík 29 Listopadu 2008, 17:09:15
vytvořil jsem si pro osobní účely malý php scrptík, který mi kontroluje, jestli se v zadaném řetězci nevyskytují jiné znaky než ty, které jsem povolil...
mám pole s povolenými znaky a řetězec a pro každé písmeno z toho řetezce testuji pomocí fce in_array(), jestli je nebo není povolen.
v pohodě to funguje, ale problém je s diakritikou. i když znaky s diakritikou jsou v poly povolených znaků, při výskytu diakritiky v testovaném řetězci to vrátí chybu a já za boha nevím proč...
poradí někdo?

vyzkoušet to můžete tady (http://tomasjancik.net/my-files/allowed_chars/index.php)
kód si prohlédněte tady (http://tomasjancik.net/my-files/allowed_chars/allowed_chars.txt)
Název: Re: problém s php a diakritikou
Přispěvatel: emil54 29 Listopadu 2008, 17:14:15
Pouzij mb_internal_encoding  :)
http://cz.php.net/manual/en/function.mb-internal-encoding.php (http://cz.php.net/manual/en/function.mb-internal-encoding.php)
Název: Re: problém s php a diakritikou
Přispěvatel: Tomáš Jančík 29 Listopadu 2008, 17:17:54
jako zkontrolovat jestli je všude použito stejné kódování a případně to převést na stejné?
díky za radu, vyzkouším jak budu mít čas...
Název: Re: problém s php a diakritikou
Přispěvatel: emil54 29 Listopadu 2008, 17:23:57
jako zkontrolovat jestli je všude použito stejné kódování a případně to převést na stejné?
díky za radu, vyzkouším jak budu mít čas...
No, to neni uplne ono. satrlen(), substr() atd. pocitaji bajty v retezci a ty znaky s diakritikou jich maji vic, takze v tom pak maji ty funkce hokej. mb_internal_encoding tohle resi - koukni do toho manualu.
Název: Re: problém s php a diakritikou
Přispěvatel: starenka 29 Listopadu 2008, 17:41:38
no a taky je zaklad puozit ty multibyte ekvivalenty, ze... mb_strlen, mb_strpos etc...

ps. jinak asi elegantnejsi je to resit regularem...

Kód: [Vybrat]
$test = 'žýžýýž';
if(preg_match('@^[\w\pL0-9\.\,\!\?]*$@u',$test)) echo 'ok';
else echo 'nope';
Název: Re: problém s php a diakritikou
Přispěvatel: MacHala 29 Listopadu 2008, 23:49:46
... bajty v retezci a ty znaky s diakritikou jich maji vic ...
to neni uplne pravda - plati to pro unicode, ale napr pro iso-8859-2 ne
Název: Re: problém s php a diakritikou
Přispěvatel: emil54 30 Listopadu 2008, 10:18:27
... bajty v retezci a ty znaky s diakritikou jich maji vic ...
to neni uplne pravda - plati to pro unicode, ale napr pro iso-8859-2 ne
Jasne, ale to v tom manualu je napsany dost polopaticky. Jinak ja pouzivam uz radu let vyhradne kodovani UTF-8, takze mne ani nenapadlo uvazovat o jinem  :)
Název: Re: problém s php a diakritikou
Přispěvatel: Tomáš Jančík 30 Listopadu 2008, 10:22:37
taky se snažím používat utf-8 kde to jde...
Název: Re: problém s php a diakritikou
Přispěvatel: starenka 30 Listopadu 2008, 10:36:57
nechci se vnucovat, ale ten regular je preci jen kratsi... :)
Název: Re: problém s php a diakritikou
Přispěvatel: emil54 30 Listopadu 2008, 11:00:36
nechci se vnucovat, ale ten regular je preci jen kratsi... :)
No jo, ja ten script nestudoval, ale pomoci regexp by to bylo hezci, to jo  :)
Tady treba se da nasosat zaklad: http://www.regexp.cz/ (http://www.regexp.cz/)
Název: Re: problém s php a diakritikou
Přispěvatel: starenka 30 Listopadu 2008, 11:09:20
ja taky ne, jen jsem z tech poli vzal ten whitelist ... pokud slysim "jestli je ten znak mezi znakama" rovnou zacinam psat regular ;)

$test = '!!a9887?žý,žý.ýžŘŘŘ';
if(preg_match('@^[\w\pL0-9\.\,\!\?]*$@u',$test)) echo 'ok';
else echo 'nope';