Hezké URL - problém s některými znaky – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hezké URL - problém s některými znaky – PHP – Fórum – Programujte.comHezké URL - problém s některými znaky – PHP – Fórum – Programujte.com

 

Pavel Straka
~ Anonymní uživatel
8 příspěvků
5. 5. 2012   #1
-
0
-

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ěkuji za rady.


Nahlásit jako SPAM
IP: 81.201.60.–
CZechBoY+4
Věrný člen
5. 5. 2012   #2
-
0
-

   

function prepis($retezec)
{
    $friendlyurl=Str_Replace(' ' ,'-',AddSlashes($retezec));
    $tbl = Array("\xc3\xa1"=>"a","\xc3\xa4"=>"a","\xc4\x8d"=>"c","\xc4\x8f"=>"d","\xc3\xa9"=>"e","\xc4\x9b"=>"e","\xc3\xad"=>"i","\xc4\xbe"=>"l","\xc4\xba"=>"l","\xc5\x88"=>"n","\xc3\xb3"=>"o","\xc3\xb6"=>"o","\xc5\x91"=>"o","\xc3\xb4"=>"o","\xc5\x99"=>"r","\xc5\x95"=>"r","\xc5\xa1"=>"s","\xc5\xa5"=>"t","\xc3\xba"=>"u","\xc5\xaf"=>"u","\xc3\xbc"=>"u","\xc5\xb1"=>"u","\xc3\xbd"=>"y","\xc5\xbe"=>"z","\xc3\x81"=>"A","\xc3\x84"=>"A","\xc4\x8c"=>"C","\xc4\x8e"=>"D","\xc3\x89"=>"E","\xc4\x9a"=>"E","\xc3\x8d"=>"I","\xc4\xbd"=>"L","\xc4\xb9"=>"L","\xc5\x87"=>"N","\xc3\x93"=>"O","\xc3\x96"=>"O","\xc5\x90"=>"O","\xc3\x94"=>"O","\xc5\x98"=>"R","\xc5\x94"=>"R","\xc5\xa0"=>"S","\xc5\xa4"=>"T","\xc3\x9a"=>"U","\xc5\xae"=>"U","\xc3\x9c"=>"U","\xc5\xb0"=>"U","\xc3\x9d"=>"Y","\xc5\xbd"=>"Z","'"=>"",",-"=>"kc");
    $url = StrTr($friendlyurl, $tbl);
    $address = StrTr ($url, "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýž ", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz-");
    $address = Preg_Replace ("/[^[:alpha:][:digit:]]/", "-", $address);
    $address = Trim ($address, "-");
    $address = Preg_Replace ("/[-]+/", "-", $address);
  return $address;
}

tuhle funkci jsem nějak ukradl odsud z článku a ještě z nějakejch webů a funguje docela dobře :)

http://www.testing.jabko.net/coolurl.php

Nahlásit jako SPAM
IP: 213.192.10.–
Mallcumek
~ Anonymní uživatel
1 příspěvek
12. 8. 2021   #3
-
0
-

#2 CZechBoY
Díky moc za kód. Přidal jsem nakonec funkci pro zmenšení velkých znaků. Možná to někdo řeší, já třeba nechci velká písmena v url.

$address = strtolower($address);

Výsledek je tedy :

<?php
$titulek="pšouček půjčka S -< Bobříkama kašička zpěvníček žabička řeřicha";
echo $titulek."<br><br>";

function prepis($retezec)
{
    $friendlyurl=Str_Replace(' ' ,'-',AddSlashes($retezec));
    $tbl = Array("\xc3\xa1"=>"a","\xc3\xa4"=>"a","\xc4\x8d"=>"c","\xc4\x8f"=>"d","\xc3\xa9"=>"e","\xc4\x9b"=>"e","\xc3\xad"=>"i","\xc4\xbe"=>"l","\xc4\xba"=>"l","\xc5\x88"=>"n","\xc3\xb3"=>"o","\xc3\xb6"=>"o","\xc5\x91"=>"o","\xc3\xb4"=>"o","\xc5\x99"=>"r","\xc5\x95"=>"r","\xc5\xa1"=>"s","\xc5\xa5"=>"t","\xc3\xba"=>"u","\xc5\xaf"=>"u","\xc3\xbc"=>"u","\xc5\xb1"=>"u","\xc3\xbd"=>"y","\xc5\xbe"=>"z","\xc3\x81"=>"A","\xc3\x84"=>"A","\xc4\x8c"=>"C","\xc4\x8e"=>"D","\xc3\x89"=>"E","\xc4\x9a"=>"E","\xc3\x8d"=>"I","\xc4\xbd"=>"L","\xc4\xb9"=>"L","\xc5\x87"=>"N","\xc3\x93"=>"O","\xc3\x96"=>"O","\xc5\x90"=>"O","\xc3\x94"=>"O","\xc5\x98"=>"R","\xc5\x94"=>"R","\xc5\xa0"=>"S","\xc5\xa4"=>"T","\xc3\x9a"=>"U","\xc5\xae"=>"U","\xc3\x9c"=>"U","\xc5\xb0"=>"U","\xc3\x9d"=>"Y","\xc5\xbd"=>"Z","'"=>"",",-"=>"kc");
    $url = StrTr($friendlyurl, $tbl);
    $address = StrTr ($url, "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýž ", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz-");
    $address = Preg_Replace ("/[^[:alpha:][:digit:]]/", "-", $address);
    $address = Trim ($address, "-");
    $address = Preg_Replace ("/[-]+/", "-", $address);
    $address = strtolower($address);
    return $address;
}
echo prepis($titulek);
?>
Nahlásit jako SPAM
IP: 90.181.152.–
peter
~ Anonymní uživatel
3981 příspěvků
13. 8. 2021   #4
-
0
-

https://mlich.zam.slu.cz/wys4.htm

// muj js kod
odstranDiakritiku(str) - zbav se diakritiky (abyde ti AZaz09 a bordel)
.toLowerCase() - zmen na mala pismena (zbyde az09 a bordel)
.replace(new RegExp('[^a-z0-9]+','g'),'_') - nahrad vse, co neni pismeno nebo cislo (a opakovani) podtrzitkem _ (zbyde az09 a podtrzitka pred-za-mezi znaky)
.replace(new RegExp('(^_)|(_$)','g'),''); - odstran podtrzitka ze zacatku a z konce


v jakemsi html2pdf pouzivaji tuto funkci na diakritiku - maji tam nektere znaky navic, jine vubec. Momentalce nemuzu najit nejakou vlastni funkci. mozna jednu.

	function _iso2ascii($s) {
		$iso="áäčďéěíľĺňóöőôřŕšťúůüűýžÁÄČĎÉĚÍĽĹŇÓÖŐÔŘŔŠŤÚŮÜŰÝŽ";
		$asc="aacdeeillnoooorrstuuuuyzAACDEEILLNOOOORRSTUUUUYZ";
		return strtr($s,$iso,$asc);
	}
function odstranDiakritiku($subject)
	{
	$search  = array("á","ä","č","ď","é","ě","í","ĺ","ľ","ň","ó","ô","ö","ŕ","š","ť","ú","ů","ü","ý","ř","ž","Á","Ä","Č","Ď","É","Ě","Í","Ĺ","Ľ","Ň","Ó","Ô","Ö","Ŕ","Š","Ť","Ú","Ů","Ü","Ý","Ř","Ž");
	$replace = array("a","a","c","d","e","e","i","l","l","n","o","o","o","r","s","t","u","u","u","y","r","z","A","A","C","D","E","E","I","L","L","N","O","O","O","R","S","T","U","U","U","Y","R","Z");
	return str_replace($search, $replace, $subject);
	}
Nahlásit jako SPAM
IP: 2001:718:2601:258:680c:7c11:969d:333...–
peter
~ Anonymní uživatel
3981 příspěvků
13. 8. 2021   #5
-
0
-

Jinymi slovy, zkus si tam dat mereni casu, a tva funkce by to mela delat mnohem pomaleji. Navic dela nektere veci uplne zbytecne :)
Proc treba na zacatku nahrazovat mezeru minuskem, kdyz pozdeji nahrazuje non-alfa, non-digit za minus, mezera do toho take spada :)

Nahlásit jako SPAM
IP: 2001:718:2601:258:680c:7c11:969d:333...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 41 hostů

Podobná vlákna

Hezké URL — založil Akimi Keita

Hezke URl — založil raddino

Jak na hezké URL? — založil jAkErCZ

Problém s mezerou mezi znaky — založil Orcslayer

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý