[PHP] Przyjazne linki

Przyjazne linki na stronach internetowych to już od wielu lat standard, jednak duża część webmasterów nie stosuje tego standardu i nadal na wielu witrynach możemy spotkać odnośniki w stylu ?id=1. Dla użytkownika przeglądającego stronę nie ma różnicy, czy odnośniki na niej są przyjazne, czy też nie. Jeśli chodzi o wyszukiwarki to ten temat nie jest już bez znaczenia, ponieważ jak wiadomo - adresy url mają wpływ na pozycję strony.

Podczas tworzenia strony w czystym HTML nie ma problemu z przyjaznymi linkami, ponieważ poprostu zapisujemy pliki kolejnych podstron z odpowiednimi nazwami, np. kontakt.html. Przy tworzeniu dynamicznych stron w językach do tego przeznaczonych np. PHP, sprawa jest już nieco trudniejsza. Po pierwsze - serwer, na którym hostujemy stronę musi spełniać określone wymagania tzn. pozwalać na przepisywanie adresów. Po drugie - programista powinien napisać tak mechanizm strony, aby automatycznie generował przyjazne URL'e. W tym artykule napiszemy właśnie taki prosty mechanizm generujący przyjazne adresy URL i prostą regułę w pliku .htaccess przepisującą je. Nasz mechanizm będzie tworzyć linki w formacie /strona/x.

Plik .htaccess

W pliku .htaccess dopisujemy następującą regułę:

RewriteRule ^([a-z]+)/([0-9]+)$ /index.php?id=$2

Funkcja PHP

Nasza docelowa funkcja będzie pobierała tytuł strony i zwracała "czysty" string, który nada się na segment przyjaznego URL'a. Przedtem jednak musimy napisać jeszcze dodatkową funkcję, która będzie usuwała ze stringu niepotrzebne znaki specjalne, a także zamieniała polskie litery diakrytyczne na znaki bez ogonków, ponieważ nie chcemy takich znaków w linkach. Jak napisać ową funkcję dowiesz się czytając wpis Jak usunąć polskie znaki z tekstu.

Funkcja docelowa

function friendly_links($string)

{

 $string = strtolower($string);
 $string = replace_diacritics($string);
 $string = str_replace(' ', '-', $string);
 $string = preg_replace('/[^[:alnum:]]/', '-', $string);
 $string = trim($string, '-');
 
 return $string;

}

Utworzona została funkcja friendly_links, która za argument przyjmuje ciąg znaków np. tytuł strony, a następnie filtruje ten ciąg i zwraca w formacie, który nada się na przyjazny link. Pierwsze co robi funkcja to zmienia wszystkie litery w ciągu tekstowym na małe dzięki funkcji strtolower, następnie zamienia wszystkie litery diakrytyczne na zwykłe litery przy użyciu wcześniej utworzonej funkcji replace_diacritics, którą jak napisać dowiesz się klikając w link powyżej. Kolejny etap to zastąpienie wszystkich znaków w stringu nie będących literami i cyframi na znak myślnika. Robimy to używając wyrażenia regularnego w funkcji preg_replace. Na końcu usuwamy z początku i końca ciągu znak myślnika (jeśli wystąpi) i zwracamy nasz string w czystej postaci.

Przykładowe użycie:

echo friendly_links('Tytuł artykułu'); // wyświetli "tytul-artykulu"

<a href="/<?= friendly_links($title) . '/' . $id ?>">Tytuł artykułu</a>

Komentarze

Prześlij komentarz

Dzięki za komentarz!

Popular

[HTML] Jak wstawić obrazek?

[C++] Jak obliczyć pole i obwód trapezu?

[PHP] Jak pobrać adres strony?