Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Michal Zahradníček 22. 09. 2010, 09:08:26

Název: PHP odfiltrovanie ne-alfanumerických znakov
Přispěvatel: Michal Zahradníček 22. 09. 2010, 09:08:26
Zdravím,

chcel by som sa opýtať, že či niekto náhodou neriešil odfiltrovanie nealfanumerických znakov v PHP. Chcel by som nájsť nejaké čisté riešenie pre tento problém.

Napr.

Mám reťazec "Jožko má nový bycikel. #*$& Jazdí na ňom každý deň."

A chcel by som nealfa znaky nahradiť medzerami, čiže dostanem: "Jožko má nový bycikel       Jazdí na ňom každý deň"

Zatial som dospel iba k riešeniu, že mám v jednej premennej zadefinované všetky alpha numericke znaky aj s dĺžnami a mäkčeňmi a filtrujem pomocou preg_replace. Problém ale môže nastať vtedy ak sa v texte zobrazí nejaké cuzdie slovo(príp. bude stránka v azbuke), tak mi z neho odfiltruje znaky, ktoré nemá zadané.

Ďakujem za pomoc
Název: Re: PHP odfiltrovanie ne-alfanumerických znakov
Přispěvatel: bigi 22. 09. 2010, 11:05:54
já to řeším takto:
Kód: [Vybrat]
$patterns = array('(\s+)', '([^A-Za-z]+)');
$replacements = array(' ',' ');
$text = preg_replace($patterns, $replacements, $text);
Název: Re: PHP odfiltrovanie ne-alfanumerických znakov
Přispěvatel: Michal Zahradníček 22. 09. 2010, 12:10:37
No problém je, že mne to odfiltruje aj diakritiku - čo je nežiadúce...
Název: Re: PHP odfiltrovanie ne-alfanumerických znakov
Přispěvatel: David Strejc 22. 09. 2010, 14:01:12
http://www.greenend.org.uk/rjk/2002/06/regexp.html

V PCRE podle te tabulky by to melo byt \W - nevim, jestli to v PHP zafunguje, ale mohlo by.

http://www.phpreferencebook.com/tag/pcre/

A podle druheho odkazu by taky melo.

Cili \W jsou vsechny nealfanum znaky - snad to pomuze.
Název: Re: PHP odfiltrovanie ne-alfanumerických znakov
Přispěvatel: Michal Zahradníček 22. 09. 2010, 14:49:48
Ďakujem za ďalšiu radu, ale toto taktieť odfiltruje aj znaky s diakritikou "ľščťžýá...."
Název: Re: PHP odfiltrovanie ne-alfanumerických znakov
Přispěvatel: Logik 22. 09. 2010, 15:39:23
No protože v osmibitech není jasný, jaká znaková sada se používá a tak se nepoužívá žádná. Musíš to převíst do unicode a použít modifikátor /u.