Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Wyrażenia regularne][PHP] Formularze i znaki diaktryczne różnych języków
Forum PHP.pl > Forum > Przedszkole
Tomplus
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.
Crozin
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
Tomplus
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
Crozin
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ź: ^, $
Tomplus
@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.
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.