Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] preg_match a polskie litery i klasy znaków
bartu$
post 2.12.2012, 12:30:07
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 27.06.2004

Ostrzeżenie: (0%)
-----


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?

Ten post edytował bartu$ 2.12.2012, 12:31:01
Go to the top of the page
+Quote Post
Sebek87
post 2.12.2012, 15:49:44
Post #2





Grupa: Zarejestrowani
Postów: 74
Pomógł: 24
Dołączył: 21.10.2012
Skąd: Puławy

Ostrzeżenie: (0%)
-----


Ja to robię tak:
  1. preg_match('/^[a-zĄĆĘŁÓŚŻŹąćęłóśżź ]+$/iu', $string)


Ten post edytował Sebek87 2.12.2012, 16:10:46
Go to the top of the page
+Quote Post
bartu$
post 2.12.2012, 15:56:44
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 27.06.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Sebek87
post 2.12.2012, 16:07:07
Post #4





Grupa: Zarejestrowani
Postów: 74
Pomógł: 24
Dołączył: 21.10.2012
Skąd: Puławy

Ostrzeżenie: (0%)
-----


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)


Ten post edytował Sebek87 2.12.2012, 16:10:31
Go to the top of the page
+Quote Post
bartu$
post 2.12.2012, 16:11:57
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 27.06.2004

Ostrzeżenie: (0%)
-----


Łapie wszystko bo dałem spacje we wzoru powinienem zrobić zaprzeczenie żeby wyłapać czy są niepożadane znaki
  1. preg_match('/[^[:alnum:] ]+/u', "ĘÓĄŚŁŻŹĆŃ ęóąśłżźćń")
Go to the top of the page
+Quote Post
!*!
post 2.12.2012, 16:11:58
Post #6





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


A samo
Kod
'/\w+\s/'
nie wystarczy?

Ten post edytował !*! 2.12.2012, 16:12:32


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
bartu$
post 2.12.2012, 16:14:51
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 27.06.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Crozin
post 2.12.2012, 16:19:28
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


@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.

Ten post edytował Crozin 2.12.2012, 16:20:10
Go to the top of the page
+Quote Post
!*!
post 2.12.2012, 16:22:18
Post #9





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował !*! 2.12.2012, 16:23:37


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
bartu$
post 2.12.2012, 19:32:24
Post #10





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 27.06.2004

Ostrzeżenie: (0%)
-----


Dzięki wszystkim za odpowiedzi w tym temacie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.05.2025 - 06:21