U mnoha redakčních systémů (CMS) je běžnou praxí nabízet srozumitelné URL adresy, které jsou vygenerovány z názvů článků. Přináší to nejen výhodu pro uživatele, kteří při ručním zadávání adresy zadávají srozumitelný text, ale především je to jedna z dílčích částí optimalizace (SEO) pro internetové vyhledávače.
Jak vypadá adresa vygenerovaná z názvu článku
- Název článku
- Zase nějaké optimalizace pro vyhledávače!
- URL
- http://www.nejakadomena.cz/zase-nejake-optimalizace-pro-vyhledavace
- Název článku
- Těšíte se na novu verzi? Samozřejmě, musíte!
- URL
- http://www.nejakadomena.cz/tesite-se-na-novu-verzi-samozrejme-musite
Ukázka v PHP
Existuje mnoho odlišných způsobů, jak generovat adresy z názvu článku. Přestože je více cest, většinou všechny vedou k požadovanému výsledku, tedy převedení názvu článku na adresu.
Převedení názvů na adresy nám obstará funkce, ve které budeme zpracovávat jednotlivé dílčí akce.
Nahrazení znaků s diakritikou za stejné znaky bez diakritiky
Chceme mít adresy bez diakritiky, proto musíme převést všechny znaky s diakritikou na stejné znaky bez ní. Např. ř, Ů atd.
<?php
$address = StrTr ($address, "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýž ", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz-");
?>
Převod všech velkých písmen na malá
Dalším požadavkem jsou malá písmena v adrese. Je to otázka vkusu, ale taky běžnou praxí používat malá písmena, tak se tomu nebudeme bránit a převedeme všechna velká písmena na malá.
<!--?php
$address = strtolower ($address);
?-->
Nahrazení mezery a všech speciálních znaků za pomlčku
Z adresy nahradíme všechny speciální znaky (otazníky, uvozovky, středníky, čárky, vykřičníky a spoustu dalších) za spojovník. Stejně tak nahradíme všechny mezery.
<?php
$re = "/[^[:alpha:][:digit:]]/";
$replacement = "-";
$address = preg_replace ($re, $replacement, $address);
?>
Úprava začátku a konce řetězce
Protože nám na začátku a na konci řetězce mohly vzniknout (z předchozích kroků) spojovníky, což je nežádoucí, odstraníme je.
<?php
$address = trim ($address, "-");
?>
Odstranění opakujícího se spojovníku
Pokud jsou v názvu článku dva vykřičníky, byly nahrazeny dvěma spojovníky. Toto je další nežádoucí efekt. Proto odstraníme všechny spojovníky, které jsou dva a více vedle sebe.
<?php
$re = "/[-]+/";
$replacement = "-";
$address = preg_replace ($re, $replacement, $address);
?>
A celé to vypadá takto…
<?php
/** Vygenerovani pratelske URL adresy
* @param string $title retezec, ze ktereho vygenerujeme url adresu
* @return string $address vraceny retezec obsahujici friendly url
* @copyright Zdenek Vecera, zdenek.vecera@gmail.com
*/
function seo_url ($title){
$address = $title;
// nahradi znaky s diakritikou na znaky bez diakritiky
$address = StrTr ($address, "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýž ", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz-");
// prevede vsechna velka pismena na mala
$address = strtolower ($address);
// nahradi pomlckou vsechny znanky, ktera nejsou pismena
$re = "/[^[:alpha:][:digit:]]/";
$replacement = "-";
$address = preg_replace ($re, $replacement, $address);
// odstrani ze zacatku a z konce retezce pomlcky
$address = trim ($address, "-");
// odstrani z adresy pomlcky, pokud jsou dve a vice vedle sebe
$re = "/[-]+/";
$replacement = "-";
$address = preg_replace ($re, $replacement, $address);
return $address;
}
?>
Jak to vyzkoušet
Pro otestování stačí výše uvedenou funkci vložit do PHP souboru spolu například s následujícím zavoláním funkce:
<?php
echo seo_url ("Zase nějaké optimalizace pro vyhledávače!");
?>
Uvedenou funkci lze samozřejmě nadále optimalizovat a přizpůsobovat konkrétním požadavkům.