Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne]problem z wyrażeniami regularnymi zawieraj±cymi polskie znaki
Forum PHP.pl > Forum > Przedszkole
lamcpp
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?
!*!
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
by_ikar
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.
!*!
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.
by_ikar
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ć ;)
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.