PHP odfiltrovanie ne-alfanumerických znakov

PHP odfiltrovanie ne-alfanumerických znakov
« kdy: 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


bigi

Re: PHP odfiltrovanie ne-alfanumerických znakov
« Odpověď #1 kdy: 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);

Re: PHP odfiltrovanie ne-alfanumerických znakov
« Odpověď #2 kdy: 22. 09. 2010, 12:10:37 »
No problém je, že mne to odfiltruje aj diakritiku - čo je nežiadúce...

David Strejc

Re: PHP odfiltrovanie ne-alfanumerických znakov
« Odpověď #3 kdy: 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.

Re: PHP odfiltrovanie ne-alfanumerických znakov
« Odpověď #4 kdy: 22. 09. 2010, 14:49:48 »
Ďakujem za ďalšiu radu, ale toto taktieť odfiltruje aj znaky s diakritikou "ľščťžýá...."


Logik

  • *****
  • 1 022
    • Zobrazit profil
    • E-mail
Re: PHP odfiltrovanie ne-alfanumerických znakov
« Odpověď #5 kdy: 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.