Všem svým čtenářům častým i příležitostným, i náhodným poutníkům kteří zabloudili na můj blog přeji veselé Vánoce a šťastný nový rok 2008. Stejně tak mým blízkým i lidem neznámým, všem přeji pohodové svátky a vstup do nového roku tou správnou nohou.

prani.png

A protože se můj blog mimo jiné věnuje i tvorbě webu, tak kromě pěkného přáníčka, které pro mě vytvořil Danburger vám nadělím pod stromeček také pár skriptů a ukázek kódu, o kterých si myslím, že jsou upotřebitelné. Otevřel jsem zdrojové kódy svého redakčního systému a vybral pár funkcí, které se "můžou hodit". Zmíním zde funkci pro vytvoření řetězce pro hezké url a také něco málo o lomítkách na konci adresy.

PHP : základ hezkých url

K vytvoření hezkých url nám někdy mod_rewrite nestačí. Při práci s databází je nutné data odeslaná z formulářů zpracovat, a dynamicky generovat přátelské řetězce například z titulku článku. Uvedená funkce se postará o odstranění diakritiky, převodu na malá písmena a náhradu všech "nepřípustných" znaků na pomlčky.

Předpokládejme i možnost, že pracujeme s kódováním UTF, a tak ještě před zavoláním funkce strtolower() převedeme všechny znaky s diakritikou na malá písmena. Zde se často zapomíná na přehlasované samohlásky, či slovenské zmakčené l'. Dále už můžeme převést všechna ostatní písmena na malá. Pro případ, že jsme řetězec ještě před zavoláním funkce prohnali přes htmlspecialchars() se na dalším řádku zbavíme případných entit. Dva následující řádky s funkcí preg_replace() sice nejsou z mé hlavy, ale jsou přesně to, co pro vytvoření hezkého řetězce potřebujeme: vše, kromě alfanumerických znaků, pomlčky a lomítka nahradíme za pomlčku. Druhým regulárním výrazem se zbavíme více možných pomlček po sobě. Ve finále už jen zavoláme mého dobrého kamaráda trim() a odstraníme pomlčky ze začátku a konce řetězce.

Následující funkce převede "Takový škaredý řetězec" na "takovy-pekny-retezec":

function permalink($permalink) {
    $permalink = str_replace(
        array('Á','Ä','É','Ë','Ě','Í','Ý','Ó','Ö','Ú','Ů','Ü','Ž','Š','Č','Ř','Ď','Ť','Ň','Ľ','á','ä','é','ë','ě','í','ý','ó','ö','ú','ů','ü','ž','š','č','ř','ď','ť','ň','ľ'),
        array('a','a','e','e','e','i','y','o','o','u','u','u','z','s','c','r','d','t','n','l','a','a','e','e','e','i','y','o','o','u','u','u','z','s','c','r','d','t','n','l'),
        $permalink);
    $permalink = strtolower($permalink);
    $permalink = str_replace(array('<', '>'), "-", $permalink);
    $permalink = preg_replace("/[^[:alpha:][:digit:]_]/", "-", $permalink);
    $permalink = preg_replace("/[-]+/", "-", $permalink);
    $permalink = trim($permalink, "-");
    return $permalink;
}

PHP : automatické doplnění / umazání koncového lomítka

V druhém dílu svého seriálu o mod_rewrite jsem uváděl příklad, jak automaticky doplnit lomítko na konec adresy. Bohužel, zmíněné řešení není stoprocentní, a někdy je nutné najít alternativní postup při řešení problému. Zde na blogu koncové lomítko také doplňuji, ale používám k tomu následující funkci.

// automatické doplneni koncoveho lomitka
function add_ending_slash() { 
	if (substr($_SERVER['REQUEST_URI'], -1) != '/') {
		header('Location: ' . $_SERVER['REQUEST_URI'] . '/', 301);
	}
	return false;
}

Pokud chceme koncové lomítko automaticky umazávat, je nutné nejdříve ošetřit zacyklení: přesměrování totiž proběhne i v případě, když zadáme adresu exitujícího adresáře. Což ale platí jen pro zápis v .htaccessu, v PHP už je umazávání bezpečné. Tedy pokud používáme nějaký rozumný RewriteRule v našem .htaccessu. 

// automaticke umazani koncoveho lomitka
function remove_ending_slash() { 
	if (substr($_SERVER['REQUEST_URI'], -1) == '/') {
		header('Location: ' . rtrim($_SERVER['REQUEST_URI'], '/'), 301);
	}
	return false;
}

Chtěl jsem napsat ještě i něco málo o stylech, ale už mě dnes přemáhá únava. Takže ještě jednou: Šťastné a veselé!

// Edit 4. 5. 2020: Upraveny funkce add/remove_ending_slash, protože obsahovaly zapovězené funkce ereg_. A vlastně jsem z nich odstranil reguláry úplně, protože to jde snadno i bez nich.