Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Wyrażenia regularne][PHP] Formularze i znaki diaktryczne różnych języków, Sprawdzenie danych a znaki diaktryczne
Tomplus
post
Post #1





Grupa: Zarejestrowani
Postów: 1 884
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

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


Witam,

Naszukałem się trochę, ale nigdzie nie dostałem jednoznacznej odpowiedzi.

Chcialbym się dowiedzieć jak bez żadnych kłopotów wprowadzać do bazy danych takie rzeczy jak nazwy miast, imiona, nazwiska które zawierają oczywiście znaki diaktryczne, a że mój kłopot nie zamyka się na języku polskim, to dlatego pytam jak zrobić bezpieczne sprawdzenie takich nazw ?

Do tej pory ten problem rozwiązałem stosując znaki kilku krajów, ale nie wydaje mi sie to eleganckie w przypadku kiedy na świecie jest więcej języków, szczególnie miasta mają różną pisownie.

Dodatkowo chciałbym taki kod zabezpieczyć przed SQL Injection aby nie były wpisane znaki takie jak /* */ czy litery i znaki zapisane szestnastkowo.



:Edit:
Poprawiłem trochę temat, aby dawał więcej informacji o problemie.

Ten post edytował Tomplus 31.03.2011, 10:47:07
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Crozin
post
Post #2





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

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


Litery w PCRE to \pL i m.in. przy pomocy tego możesz sprawdzać czy coś jest zwykłym tekstem: http://pl.php.net/manual/en/regexp.reference.unicode.php
Cytat
Dodatkowo chciałbym taki kod zabezpieczyć przed SQL Injection aby nie były wpisane znaki takie jak /* */ czy litery i znaki zapisane szestnastkowo.
PDO czy coś bazującego na PDO oraz wykorzystanie prepared statements
Go to the top of the page
+Quote Post
Tomplus
post
Post #3





Grupa: Zarejestrowani
Postów: 1 884
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

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


Nie wiedziałem o tym (chodzi mi o litery w PCRE), ale widzę że warto o tym więcej przeczytać.

Zastanawiam się dlaczego o tym nie znalazłem na innych stronach, również zagranicznych.
wszędzie jest sprawdzanie znaków diaktrycznych w funkcjach bez zastosowania sprawdzenia czy jest to tekst czy nie.

Thx.

Jestem ciekaw co źle robie:
wpisuje string $miasto = 'Będ@zin';
potem:
  1. if (!preg_match("/\p{L}+/", $miasto)) echo 'jest blad';
  2. else echo 'miasto ma prawidłową nazwę';


Wynik: brak błędu
Go to the top of the page
+Quote Post
Crozin
post
Post #4





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

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


1. Powieneś dodać flagę u (małe U)
2. Wzorzec określa, że ma być jedna lub więcej liter. Jest w tekście jedna lub więcej liter? Jest, więc pasuje. Podpowiedź: ^, $
Go to the top of the page
+Quote Post
Tomplus
post
Post #5





Grupa: Zarejestrowani
Postów: 1 884
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

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


@Crozin
W koncu sam wymyśliłem zapytanie i zastosowałem bez /u
Szukałem w manualu dla PCRE na php.net ale nie znalazłem opisu flag na koncu wyrażenia.
Czy podpowiesz mi adres strony w ktorym jest więcej opisów flag aby się doinformować na ten temat ?
bo wiem że jest jeszcze /i i chyba /d ale opisu tego nie widziałem.

Jednakże kod wygląda po zastosowaniu ^ i $ w ten sposób:

Kod
if (preg_match("/^([a-ż.-\s\pL]){4,36}$/", $miasto)) {}


Dlatego teraz nazwy są akceptowane takie jak trzeba nie ważne czy to Będzin, Królewska Wola czy München.
jak dodam liczbę 2 lub jakies liczby to przestaje akceptować, jak również nie działa przy zastosowaniu obcych znaków z wyjątkiem KROPKI oraz myślnika, bo czasami zdarzają się podwójne nazwy miast. np. Bielsko-Biała.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 3.10.2025 - 02:56