Autor Zpráva
Vaškic
Profil *
Potřeboval bych jsem zadat do regularního výrazu diakritiku (malé i velké znaky). Když dám klasicky [a-zA-Z] tak je to bez znaků jako ěščř.... rád bych je tam nějak dostal aniž bych je tam musel jedno po druhým vypisovat... Nevíte někdo jestli to nějak jde?
Diky
Leo
Profil
Jedine vypsat, Leo
halogan
Profil
Nikoliv, stačí [[:alpha:]]
Elvis
Profil *
Dnes jsem narazil na stejný problém, s nímž chtěl poradit Vaškic.

K odpovědi halogan, 4.5.2005 mám dvě následující výhrady:

1. [[:alpha:]] se mi interpretuje stejně jako [a-zA-Z]. Myslel jsem, že si PHP nerozumí s nastavením češtiny a předpokládal jsem, že pomocí funkce

setlocale(LC_ALL, "cs_CZ.iso-8859-2")

nějak docílím toho, že znaky s diakritikou budou chápány jako "písmena", tedy budou matchovat s [[:alpha:]].

Není to tak, asi jsem někde udělal chybu, ale nevím, co dělám špatně. Podle toho, co jsem si přečetl, by se lokální nastavení mělo správně načíst ze systému (což je přesně ta čeština s iso-latin 2 kódováním, kterou se snažím vnutit pomocí setlocale).

2. Myslím, že konstrukce jako [[:alpha:]] nebo [[:digit:]] nelze používat v preg_match(), ale jen v ereg(). Pletu se?

Díky za odpověď.
halogan
Profil
Nevím, používám UTF-8, takže PCRE odpadají, takže používám jen POSIXy.
mb_regex_encoding("UTF-8");
mb_internal_encoding("UTF-8");
if (mb_eregi("^[[:alpha:]]+$"...)

v pohodě funguje...
Elvis
Profil *
Díky za promptní odpověď. Problém je, že si stále nedokáži poradit.

Hosting stránek mám na ******* a jejich phpinfo() říká, že v configure options --enable-mbstring bylo. Díval jsem se na tabulku nastavení mbstring vypisovanou phpinfo(), všechno je enabled.

Na požadavek mb_regex_encoding("ISO-8859-2") a mb_internal_encoding("ISO-8859-2") říká, že ISO-8859-2 není žádné známé kódování, tak jsem příslušné stringy, s nimiž pracuji, překódoval do UTF. Všechno mb_cokoli jsem se pokusil nastavit na UTF-8, tváří se, že to akceptuje.

Výsledek: [[:alpha:]] je pořád [a-zA-Z].


No, ne že by to bylo tak důležité, samozřejmě mohu do RE napsat [[:alpha:]ěščřžýáíéóúůďťň], spíš mě zajímá, jak je to možné. Pardon, vlastně bych musel vypsat i velká písmena, protože je to v eregi.

Ještě jednou díky a jak říkám, není důvod hledat zásadní řešení, protože to jde odrbat.
Elvis
Profil *
Jejda, tady je nějaká ochrana proti nesprávnému url nebo co? No to je jedno, kdyžtak je to webhosting tečka php4 tečka ***** tečka cz. Omlouvám se za kiks.
Fred
Profil
že by *****.
Hm, myslel jsem si to.
Neboj moudří vědí, kde máš hosting, bylo to tu zakázáno, kvůli spamování provozovatelů tohto hostingu
Elvis
Profil *
Došlo mi, že to bude něco takového.

Každopádně já ten hosting nemíním nijak propagovat, šlo mi jen o odkaz na stránku zobrazující phpinfo(), aby bylo jasné, o jakou konfiguraci se jedná.
halogan
Profil
Elvis: mbstring ve spojení s ISO 8859-2 nemusíte řešit. mb_ funkce jsou pro multibyte kódování (UTF, ...).
Elvis
Profil *
No jestli já nejsem kapitální osel! Samozřejmě, že "multibyte" znamená unikód. Omlouvám se...

Nicméně když tedy používám (nebo chci použít) kódování jednobytové, jako např. zmíněné iso-latin-2, je problém s nerozlišováním diakritických písmen v [[:alpha:]] způsoben čím? Nastavením lokálního prostředí, které lze nějak přechytračit pomocí setlocale(), a já jenom v něčem dělám chybu? Nebo něčím úplně jiným?
Toto téma je uzamčeno. Odpověď nelze zaslat.