Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: problém s php a diakritikou  (Přečteno 4821 krát)

Tomáš Jančík

  • Stálý člen
  • **
  • Příspěvků: 1179
    • TomášJančík.net
problém s php a diakritikou
« kdy: 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
kód si prohlédněte tady

emil54

  • Host
Re: problém s php a diakritikou
« Odpověď #1 kdy: 29 Listopadu 2008, 17:14:15 »
« Poslední změna: 29 Listopadu 2008, 17:17:41 od emil54 »

Tomáš Jančík

  • Stálý člen
  • **
  • Příspěvků: 1179
    • TomášJančík.net
Re: problém s php a diakritikou
« Odpověď #2 kdy: 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...

emil54

  • Host
Re: problém s php a diakritikou
« Odpověď #3 kdy: 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.

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
Re: problém s php a diakritikou
« Odpověď #4 kdy: 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';
« Poslední změna: 29 Listopadu 2008, 18:10:11 od starenka »
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

MacHala

  • Stálý člen
  • **
  • Příspěvků: 1104
  • Big Bro iz watching joo!
    • ZlejT
Re: problém s php a diakritikou
« Odpověď #5 kdy: 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
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

emil54

  • Host
Re: problém s php a diakritikou
« Odpověď #6 kdy: 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  :)

Tomáš Jančík

  • Stálý člen
  • **
  • Příspěvků: 1179
    • TomášJančík.net
Re: problém s php a diakritikou
« Odpověď #7 kdy: 30 Listopadu 2008, 10:22:37 »
taky se snažím používat utf-8 kde to jde...

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
Re: problém s php a diakritikou
« Odpověď #8 kdy: 30 Listopadu 2008, 10:36:57 »
nechci se vnucovat, ale ten regular je preci jen kratsi... :)
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

emil54

  • Host
Re: problém s php a diakritikou
« Odpověď #9 kdy: 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/

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
Re: problém s php a diakritikou
« Odpověď #10 kdy: 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';
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

 

Provoz zaštiťuje spolek OpenAlt.