Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne]problem z wyrażeniami regularnymi zawierającymi polskie znaki
lamcpp
post 6.12.2011, 08:53:31
Post #1





Grupa: Zarejestrowani
Postów: 372
Pomógł: 2
Dołączył: 10.05.2009

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


witam, używam .htaccess do tworzenia prostych adresów, taka reguła:
Kod
RewriteRule ^Inne/([0-9]+)/([0-9]+)/([-\s{}0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\?]+)$ index.php?kategoria=Inne&id=$1&page=$2&nazwa=$3

działa dobrze do czasu, gdy nazwa artykułu zawiera polskie znaki.
Cytat
np. Jak zbadać glebe?

Jest tu znak ć, wyrażenie nie zadziała a serwer zwróci błąd 404, w którym będzie pisało:
Cytat
The requested URL /Inne/2/1/Jak-zbadać-glebe?

widać tu że polskie znaczki zostają zamienione na jakieś krzaczki, ć -> zostało zamienione na ć
i w przypadku gdy dodam do reguły znak ć to wszystko będzie działać poprawnie:
Kod
RewriteRule ^Inne/([0-9]+)/([0-9]+)/([-\s{}0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\?ć]+)$ index.php?kategoria=Inne&id=$1&page=$2&nazwa=$3

Pytanie: skąd się wzięły takie krzaczki zamiast pl znaków, jak zrobić by nie trzeba było dodawać w regule tych krzaczków a'la: ć tylko by poprawnie reagowała ona na polskie znaki?
Go to the top of the page
+Quote Post
!*!
post 6.12.2011, 09:31:27
Post #2





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

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


Zacznijmy od tego że link nie powinien zawierać PL znaków, w ogóle nie powinien zawierać niczego więcej prócz [0-9a-z] i jakiś od dzielników. Przy zapisie linku do bazy, jego generowaniu zamieniasz np.
Kod
ą => a, ć => c
itd. Problemem może być też kodowanie jakie ustawiłeś. Sprawdź czy wszędzie masz utf-8

A jeśli się upierasz przy PL znakach, to zamień je tak samo:

Cytat
ą %B1
ć %E6
ę %EA
ł %B3
ń %F1
ó %F3
ś %B6
ż %BF
ź %BC

Ą %A1
Ć %C6
Ę %CA
Ł %A3
Ń %D1
Ó %D3
Ś %A6
Ż %AF
Ź %AC


Choć to masochizm, bo co jeśli wpiszę Inne/2/1/Jak-zbadac-glebe ? Już mi się strona nie wyświetli, albo będzie inna? A wpiszę ją tak, bo nawet szary kowalski wie iż w adresach WWW nie ma ogonków wink.gif

urldecode
utf8-decode

Ten post edytował !*! 6.12.2011, 10:16:39


--------------------
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
by_ikar
post 6.12.2011, 12:05:12
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Nie no z polskich znaków korzystać można a adresach url. Zamiast wrzucać do wyrażenia niejako "zabezpieczenie" przed wpisywaniem niepowołanych znaków, czyli umieszczaniem w zakresie znaków wszystkiego co może przelecieć, wrzuć tam jakieś wyrażenie które przeleci przez wszystko. Powiedzmy:

Kod
RewriteRule ^Inne/([0-9]+)/([0-9]+)/(.+)$ index.php?kategoria=Inne&id=$1&page=$2&nazwa=$3


Lub jak już usilnie próbujesz zrobić dodatkowe zabezpieczenie, to zamiast dozwolone znaki, spróbuj wypisać niedozwolone, coś na ten przykład:

Kod
RewriteRule ^Inne/([0-9]+)/([0-9]+)/([^\,\.\/<>\?]+)$ index.php?kategoria=Inne&id=$1&page=$2&nazwa=$3


aczkolwiek, nie wypisałem tutaj wszystkich niedozwolonych znaków. Dodatkowo poczytaj ten temat: http://forum.php.pl/index.php?showtopic=171554 być może masz podobny problem, którego rozwiązania póki co nie ma.

Ten post edytował by_ikar 6.12.2011, 12:07:55
Go to the top of the page
+Quote Post
!*!
post 6.12.2011, 15:19:15
Post #4





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

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


Tak, korzystanie ze znaków diakrytycznych w adresach url jest dozwolone. Jednak to sztuczny twór, powstały tylko po to, aby powiększyć pulę dostępnych adresów, tak samo głupi jak sub domena "m" dla urządzeń mobilnych.


--------------------
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
by_ikar
post 6.12.2011, 15:26:39
Post #5





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Cytat(!*! @ 6.12.2011, 15:19:15 ) *
Tak, korzystanie ze znaków diakrytycznych w adresach url jest dozwolone. Jednak to sztuczny twór, powstały tylko po to, aby powiększyć pulę dostępnych adresów, tak samo głupi jak sub domena "m" dla urządzeń mobilnych.


Jeżeli chodzi o domeny i znaki diakrytyczne to tak, mam takie samo zdanie jak ty. Ale jeżeli chodzi o adres url, to już jest inna kwestia tak na prawdę. Można tam trzymać te polskie znaki, ale wcale nie trzeba, dlatego że dzisiaj wyszukiwarki typu google, bardzo świetnie sobie radzą morfologią danych słów, więc stosowanie tych polskich znaków jest IMO sztuką, dla sztuki. No ale jak ktoś chce, to może używać ;)
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: 21.06.2025 - 01:50