Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przyjazne linki, mysql i regexp
Forum PHP.pl > Forum > PHP
notfound
Witam,

Ucze sie wlasnie przerabiania strony na przyjaznolinkowalnosc. smile.gif

Po dotychczasowej edukacji udalo sie juz osiagnac nastepujace efekty:

* link do artykulu o przykladowym tytule "Zażółć gęślą jaźń! Co zażółcić?" wyglada tak:
http://adres.pl/artykuly/zazolc-gesla-jazn-co-zazolcic.html
[czyli pliterki zamienione na ich lacinkie odpowiedniki, spacje na myslniki, powycinane wszelkie znaki przystankowe]

* wlasciwa strona wywolywana jest prostym mod_rewrite'm:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^artykuly/(.*).html$ /artykuly/artykul.php?id=$1

Wyjasnic nalezy, ze wszystkie artykuly siedza w bazie MySQL, ich tytuly zawieraja oczywiscie polskie literki, spacje i rozne znaki przestankowe.

I tu zaczyna sie problem, jako ze troche opornie wychodzi mi konstrukcja wlasciwego zapytania do bazy, ktore wyciagnelo by artykul o przekazanym w linku tytule.

W tej chwili wyglada to tak:

* posilkujac sie rozwiazaniem znalezionym na stronie http://forum.php.pl/index.php?showtopic=32728 zapytanie przyjelo nastepujaca postac:
$query = "SELECT * FROM artykuly WHERE tytul RLIKE '" . filtrujPL($szukaj) . "'";

gdzie:

function filtrujPl($tekst)
{
return strtr($tekst, array(
'a'=>'[AaĄą]',
'c'=>'[AaĆć]',
(...)
'z'=>'[ZzŻżŹź]',
));
}

i to radzi sobie calkiem ladnie z brakiem polskich literek i spacji w adresie, natomiast jakos nie moge wykombinowac, co dodac do zapytania, zeby rownie dobrze radzilo sobie z wszelkimi wycietymi z tytulu znakami przestankowymi (kropki, przecinki, wykrzykniki itp.)

Dziekuje z gory na wszelkie sugestie. smile.gif

Jednoczesnie, wzmianka w odpowiedzi pod przytoczonym powyzej adresem [cytujac - "Jak się nie boisz (czytaj jak nie masz setek userów)"] sugeruje, ze wykorzystanie owej funkcji filtrujPL nie jest chyba zbyt efektywnym rozwiazaniem... Mozna zatem zrobic to jakos lepiej? winksmiley.jpg
phpion
Zamiast linków w postaci:
http://adres.pl/artykuly/zazolc-gesla-jazn-co-zazolcic.html
Twój je z uwzględnieniem id artykułu, np. tak
http://adres.pl/artykuly/1-zazolc-gesla-ja...o-zazolcic.html
gdzie 1 to byłby id artykułu. Wycinasz je sobie albo w .htaccess albo w samym PHP. Wtedy możesz wybrać dane z bazy na podstawie id - czyli najwydajniej.
notfound
Jest to jakies rozwiazanie, to fakt, jak rowniez na przyklad dodanie do linka timestampa, albo dodanie w bazie jeszcze jednego pola ze skonwertowanym odpowiednio tytulem, ale... wlasnie wolalbym, zeby wygladalo to tak, jak napisalem. ;) Zadnych dodatkowych cyferek ani przerobek bazy, tylko odpowiednia modyfikacja owego nieszczesnego regexpa...
phpion
No jeśli chcesz mieć sexowne linki (tj. bez identyfikatora) to się baw ale pamiętaj, że wyszukiwanie po kluczach będących liczbami całkowitymi jest o wiele szybsze niż po stringach.
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.