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
-
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)
-
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)
-
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...
-
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.
-
no a taky je zaklad puozit ty multibyte ekvivalenty, ze... mb_strlen, mb_strpos etc...
ps. jinak asi elegantnejsi je to resit regularem...
$test = 'žýžýýž';
if(preg_match('@^[\w\pL0-9\.\,\!\?]*$@u',$test)) echo 'ok';
else echo 'nope';
-
... 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
-
... 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 :)
-
taky se snažím používat utf-8 kde to jde...
-
nechci se vnucovat, ale ten regular je preci jen kratsi... :)
-
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/)
-
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';