Autor Zpráva
Pavel Straka
Profil
Dobrý večer, snažím se vytvořit hezké URL adresy tak, že z výchozího řetězce odstraním diakritiku a různé paznaky. Takto:
function url($text) {
   $text = strtr($text, "áäčďéěëíµňôóöŕřšťúůüýžÁÄČĎÉĚËÍĄŇÓÖÔŘŔŠŤÚŮÜÝŽ", "aacdeeeilnooorrstuuuyzaacdeeelinooorrstuuuyz");
         
   $text = preg_replace("~[^\\pL0-9_]+~u", "-", $text);
   $text = trim($text,"-");                           
   $text = StrToLower($text);
   $text = preg_replace("~[^-a-z0-9_]+~", "", $text);
      
   return $text;
}

Můj problém: pokud je ve výchozím textu např. znak: ´ , funkce nevrátí vůbec nic. Je nějaký způsob, jak mohu stoprocentně zajistit, aby se cokoliv, co uživatel zadá, správně převedlo na text hezké URL?
Děkuj za rady.
Davex
Profil
Tento kód je jakýsi pokus o hybrida, protože pro kódování utf-8 se takto nedá použít funkce strtr() a pro jiná kódování nelze použít regulární výraz v prvním preg_replace().

Po opravení té funkce v souladu s originálem by to mělo fungovat spolehlivě pro kódování utf-8.
Pavel Straka
Profil
A pro kódování windows-1250 nemohu ten kód použít?
Davex
Profil
Ano, ale regulární výraz v prvním preg_replace() se musí upravit (asi na "~[^a-zA-Z0-9_]+~"). Nezkoušel jsem.
Pavel Straka
Profil
Abych se přiznal nerozumím tomu, tento příkaz už v té funkci je obsažen. Jakým způsobem tedy připravím funkci pro hezké URL v kódování cp-1250?
Davex
Profil
Řádek

$text = preg_replace("~[^\\pL0-9_]+~u", "-", $text);

by mělo stačit přepsat na

$text = preg_replace("~[^a-zA-Z0-9_]+~", "-", $text);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: