Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] preg_match a polskie litery i klasy znaków
Forum PHP.pl > Forum > Przedszkole
bartu$
Szukam sposobu jak zabezpieczyć pole z imieniem i nazwiskiem przed email header injection.

Pole to sklejam w nagłówku maila:
Reply-to: Imie i nazwisko <adres@email.pl>

Adres email to osobne pole. Mi chodzi tylko o imie i nazwisko.
Pomy¶lałem o preg_match i klasie znaków. W końcu może się zdarzyć obcojęzyczne imie i nazwisko.

Mój pomysł:
  1. preg_match('/[[:alnum:] ]+/u', "ĘÓˇ¦ŁŻ¬ĆŃ ęó±¶łżĽćń");


Działa smile.gif Ale czytam w dokumentacji php.net, że
Cytat
In UTF-8 mode, characters with values greater than 128 do not match any of the POSIX character classes.


Polskie znaki maj± wyższy kod niż 128 a mimo wszystko działa.

1. Zastanawiam się czy to nie przypadek?
2. Je¶li to przypadek to jak Wy zabezpieczyliby¶cie to pole?
Sebek87
Ja to robię tak:
  1. preg_match('/^[a-zˇĆĘŁÓ¦Ż¬±ćęłó¶żĽ ]+$/iu', $string)
bartu$
Cytat(Sebek87 @ 2.12.2012, 15:49:44 ) *
Ja to robię tak:
  1. preg_match('/^([a-zˇĆĘŁÓ¦Ż¬±ćęłó¶żĽ ])+$/iu', $string)


A jak w polu kto¶ wpisze niemieckie umlauty? SprawdĽ, że zadziała Ci to co ja wstawiłem czyli klasa [:alnum:]. Dziwi mnie to jednak bo dokumentacja mówi, że działać nie powinno.
Sebek87
W Twoim przykładzie zadziała wszystko nawet znaki specjalne, ponieważ nie dałe¶ znaku pocz±tku ci±gu.

Dodaj sobie do mojego przykładu Niemieckie przegłosy i po problemie.
Np.:
  1. preg_match('/^[a-zˇĆĘŁÓ¦Ż¬±ćęłó¶żĽÄÖ itd... ]+$/iu', $string)
bartu$
Łapie wszystko bo dałem spacje we wzoru powinienem zrobić zaprzeczenie żeby wyłapać czy s± niepożadane znaki
  1. preg_match('/[^[:alnum:] ]+/u', "ĘÓˇ¦ŁŻ¬ĆŃ ęó±¶łżĽćń")
!*!
A samo
Kod
'/\w+\s/'
nie wystarczy?
bartu$
Bardziej chciałbym się dowiedzieć od kogo¶ kto lepiej zna temat - czy klasy znaków które można używać w funkcjach typu preg_* uwzględniaj± polskie znaki.
Bo mi wychodzi, że tak a dokumentacja mówi wprost przeciwnie i jasno.
Crozin
@Sebek87: Unikod definiuje bodajże około 600 znaków, które s± poprawnymi literami. Solidna aplikacja powinna je wszystkie przepuszczać. Dopisywanie każdej z osobna to idiotyzm.
@!*!: \w to odpowiednik a-zA-Z0-9_, więc nie wystarczy - brak obsługi liter niełacińskich.
@bartu$: ^[\pL ]+$ - to wyrażenie, którego szukasz.

EDIT:
@bartu$: a-z nie łapie polskich znaków.
!*!
Cytat(bartu$ @ 2.12.2012, 16:14:51 ) *
czy klasy znaków które można używać w funkcjach typu preg_* uwzględniaj± polskie znaki


Tak je¶li uwzględnisz to poprzez sekwencje lub modyfikatory. http://pl1.php.net/manual/en/reference.pcr...tern.syntax.php

@Crozin - racja, pomyliłem to ze zmian± znaków.
bartu$
Dzięki wszystkim za odpowiedzi w tym temacie.
To jest wersja lo-fi głównej zawarto¶ci. Aby zobaczyć pełn± wersję z większ± zawarto¶ci±, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.