Autor Zpráva
seberm
Profil *
Dobry den.

Na programujte.com jsem nasel navod (http://programujte.com/index.php?akce=clanek&cl=2006092301-vytvarime-srozumitelne-url-adresy-z-nazvu-clanku) na vytvoreni SEO adres pro clanky. Pokud ale moje funkce dostane parametr napriklad "zkouška", vrati hodnotu "zkouy-ka". Nepomohl by mi prosim nekdo naleznout chybu?

"Moje" funkce vypada takto:
public function getNewsName ($title) {
	/* Zakomentovano kvuli bugu v php (http://bugs.php.net/bug.php?id=32244) -nefunguje na mem php (verze 5.2.9) */
	//$title = iconv("UTF-8", "ISO-8859-2", $title);
	
	$title = StrTr ($title, "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýž ", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz-");
	
	$title = StrToLower($title);
	
	//...Znaky abecedy + cisla, vyjimaje specialnich znaku - ty jsou nahrazeny > "-"
	$pattern = "/[^[:alpha:][:digit:]]/";
	$replacement = "-";
	$title = Preg_Replace ($pattern, $replacement, $title);
	
	//...Odstranenni znaku "-" z konce a zacatku retezce
	$title = Trim ($title, "-");
	
	//...Pokud se nekde znak "-" opakuje vicekrat za sebou, je nahrazen jednim
	$pattern = "/[-]+/";
	$replacement = "-";
	$title = Preg_Replace ($pattern, $replacement, $title);
	
	return $title;
}


Chyba bude nejspise ve spatne definici parametru pro funkci strtr() a naslednemu volani preg_replace se spatnym $pattern.
tiso
Profil
seberm - nechaj si vypísať $title po riadku 5, ak to bude vyzerať rovnako, tak máš problém s kódovaním..
Jack Finger
Profil
Místo
$title = StrTr ($title, "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýž ", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz-"); 

použij
$title = strtr($title, array('Á' => 'A', 'Ä' => 'A', 'Č' => 'C', ........));

popř. jednodušeji
$title = strtr($title, array(array('Á','Ä') => 'A', 'Č' => 'C', ........));


Edited at 22:04.
blizz_boz
Profil
moja funkcia je omnoho jednoduchšia, vpodstate robí to isté iným spôsobom:

function coolUri($title)
{
	mb_internal_encoding("UTF-8");
	$uri = str_replace(array('$', '&', '+', ',', '/', ':', ';', '=', '?', '@', '<', '>', '#', '%', '{', '}', '|', '\\', '^', '~', '[', ']', '`'), '', $title);
	$uri = trim($uri);
	$uri = str_replace(' ', '-', $uri);
	return mb_strtolower($uri);
}
Jack Finger
Profil
blizz_boz
Jenže neřeší problém diakritiky, možná proto, že neřeší diakritiku vůbec.
seberm
Profil *
Dekuji moc za reakce. Jdu to vyzkouset :-)
blizz_boz
Profil
Jack Finger
moja funkcia podporuje diakritiku v UTF8 , vsetko bez problemov funguje pozri si moju stranku:

http://www.ipremiere.eu
DJ Miky
Profil
moja funkcia podporuje diakritiku v UTF8 , vsetko bez problemov funguje

Ale neřeší ji, proto pak vznikají šílenosti typu "Aké kritériá by mal spĺňať každý model?""ak%C3%A9-krit%C3%A9ri%C3%A1-by-mal-sp%C4%BA%C5%88a%C5%A5-ka%C5%BEd%C3%BD-model"
seberm
Profil *
Takze, reseni je zde:

public function getNewsName ($title) {
	$table = array(
        'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c',
        'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
        'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
        'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
        'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
        'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
        'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
        'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r',
    );
	
	$title = Strtr($title, $table);
	
	$title = StrToLower($title);
	
	//...Znaky abecedy + cisla, vyjimaje specialnich znaku - ty jsou nahrazeny > "-"
	$pattern = "/[^[:alpha:][:digit:]]/";
	$replacement = "-";
	$title = Preg_Replace ($pattern, $replacement, $title);
	
	//...Odstranenni znaku "-" z konce a zacatku retezce
	$title = Trim ($title, "-");
	
	//...Pokud se nekde znak "-" opakuje vicekrat za sebou, je nahrazen jednim
	$pattern = "/[-]+/";
	$replacement = "-";
	$title = Preg_Replace ($pattern, $replacement, $title);
	
	return $title;
}
blizz_boz
Profil
DJ Miky

mne sa to zabrazuje takto:
http://ipremiere.eu/aké-kritériá-by-mal-spĺňať-každý-model.html
tiso
Profil
blizz_boz [#4], [#7] - a to je práve ten problém, seberm chce odstrániť diakritiku z url!
blizz_boz
Profil
tiso
a načo? veď na slovensku po slovensky...
tiso
Profil
blizz_bozveď na slovensku po slovensky...
Hej?
1. seberm je čech
2. aj toto je po slovensky? http://ipremiere.eu/category-o-modelingu.html, http://ipremiere.eu/womans-char-A.html
blizz_boz
Profil
tiso

Neni, PHP používa anglickú syntax a ja som zvyknutý používať angličtinu aj v názvoch uri, premenných, polí atd aby som bol konzistentný a nemal bordel v kóde, googlu predsa nevadí angličtina. Obsah mám po slovensky... Aj uri článkov mám po slovensky pretože sa generujú z nadpisov a keď už sú v slovenčine tak by mali byť aj s diakritikou prečo by sme mali ničiť náš jazyk?
karbon
Profil *
Není jednodušší použít skript pana Vrány?
blizz_boz
Profil
karbonno ale skript od pána vrány bohužial odstraňuje aj diakritiku...
Jack Finger
Profil
ale skript od pána vrány bohužial odstraňuje aj diakritiku...
Ano, přesně o to jde!
blizz_boz
Profil
Jack Finger

no ale ešte tu nikto nevysvetlil že prečo by to malo byť URI bez diakritiky? diakritiku nemože obsahovať pokiaľ viem len URL časť adresy URI, všetko čo sa nachádza za názvom domény môže obsahovať diakritiku, veď aj napríklad Wikipédia ju používa a Google indexuje stránky aj s diakritikou tak kde je problém?
Jack Finger
Profil
blizz_boz
Problém je v tom, že seberm má ve svém kódu:
$title = StrTr ($title, "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýž ", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz-");

čímž jasně ukazuje, že tu diakritiku prostě chce odstranit. A my tu teď neřešíme problém Googlu/Wiki a diakritiky, ale problém sebermovy funkce, která špatně převádí diakritiku.
blizz_boz
Profil
Jack Finger

no ale odstraňovanie diakritiky nemá zmysel viac tu:

http://ipremiere.eu/davová-psychóza-a-seo-friendly-adresy.html
tiso
Profil
blizz_boz
a: chcem si kúpiť Audi
b: nekupuj si Audi, kúp si BMW
a: ale ja si chcem kúpiť Audi
b: kupovať si Audi nemá zmysel, kúp si BMW...

Poprosím ťa: viac sa k tejto téme nevyjadruj!
Chamurappi
Profil
Reaguji na blizz_boze:
S myšlenkou článku docela souhlasím, RFC pro URI považuji za překonané a porušování schvaluji.
Ale zjisti si prosím, co je URN, ať nepíšeš voloviny.
blizz_boz
Profil
Chamurappi
už som to prepísal späť na URI... tak ako to teda je s tým názvoslovím? :
URI je celá adresa URL a URN sú podmnožiny a URN je časť URI umiestnená za názvom domény?
Chamurappi
Profil
Reaguji na blizz_boze:
Lidsky řečeno: URL je webová adresa. URN je identifikátor syntakticky kompatibilní s URL (zdánlivě je podmnožinou URL), ale nevázaný na systém adres na internetu — jeho účelem je pouze identifikace, nikoliv určení místa. URL a URN jsou podmnožinami URI. Každá URI je buď URL, nebo URN. Obvykle není nutné rozlišovat mezi URI a URL, protože URN jsou dost vzácné.

URN vypadají třeba takhle:
urn:w3-org-ns:HTML
urn:schemas-microsoft-com:vml
urn:isbn:80-247-1495-7

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: