Autor Zpráva
koudi
Profil
Zkoušel jsem tento kód, pro generování seo uri, ale nějak se mi ho nepovedlo rozchodit.

function seoUri($uri, $maxlength = false, $separator = "-")

{
$uri = mb_strtolower(trim($uri));
$hemzy = Array("á" => "a", "ä" => "a", "č" => "c", "ď" => "d",
"é" => "e", "ë" => "e", "ě" => "e", "ï" => "i", "í" => "i", "ĺ" => "l",
"ľ" => "l", "ň" => "n", "ó" => "o", "ö" => "o", "ô" => "o", "ř" => "r",
"š" => "s", "ť" => "t", "ú" => "u", "ů" => "u", "ü" => "u", "ý" => "y", "ž" => "z");

$uri = strtr($uri, $hemzy);

$uri = preg_replace("/(&(amp;)?[a-z]+;?)|(&#[0-9]{1,2};?)/", "", $uri);
preg_match_all("/w+/", $uri, $casti);
$uri = implode($separator, $casti[0]);

if ($maxlength !== false && is_int($maxlength) && $maxlength < strlen($uri)) {
$uri = substr($uri, 0, $maxlength);
$uri = substr($uri, 0, strrpos($uri, $separator));
}

return $uri;
}


vždy se mi vrátí prázdný řetězec. Zjistil sem, že to vždycky ztroskotá na příkazu "preg_match_all("/w+/", $uri, $casti);".
Poté už se mi vrací akorát prázný řetězec (do té doby $uri obsahuje správný řetězec).
Můžete mi (třeba autor :) vysvětlit, proč je tomu tak?
Martin
Profil
zkus v regulární výrazu nahradit "w" tímto "\w"
krteczek
Profil
myslím, že je to způsobeno rozdílností verzí php: haloganova funkce je napsána již s použitím php5 funkcí.
já používám tuhle funkci upravenou tak aby běhalo pod php4.
(vypadá to hrozně ale funguje)

function vrat_seo_nazev($uri, $maxlength = false, $separator = "-")

{

//tahle funkce v parametru uri příjmá text, který převede na malá písmena,

//odstraní z textu mezery, nahradí mezery pomlčkama(defaultně),

//délka textu není omezena(defaultně)

$uri = strtolower(trim($uri));

$hemzy = Array("á" => "a", "ä" => "a", "ă" => "a", "č" => "c", "ç" => "c", "ď" => "d", "đ" => "d",

"é" => "e", "ë" => "e", "ě" => "e", "ę" => "e", "i" => "i", "í" => "i", "ĺ" => "l",

"ľ" => "l", "ł" => "l", "ň" => "n", "ó" => "o", "ö" => "o", "ř" => "r",

"š" => "s", "ť" => "t", "ú" => "u", "ů" => "u", "Ů" => "u", "Ú" => "u","Ü" => "u", "ü" => "u", "ý" => "y", "ž" => "z",

"Á" => "a", "Ä" => "a", "Â" => "a", "Ă" => "a", "Ä" => "a", "Č" => "c", "Ď" => "d", "É" => "e", "Ě" => "e",

"Ë" => "e", "Î" => "i", "Í" => "i", "Ł" => "l", "Ą" => "a", "Ś" => "s",

"Ť" => "t", "Ž" => "z", "Ş" => "s", "Ż" => "z", "ą" => "a", "ş" => "s",

"Ľ" => "l", "ľ" => "l", "ż" => "z", "Ŕ" => "r", "Ĺ" => "l", "Ć" => "c", "Ç" => "c",

"Č" => "c", "Ę" => "e", "Ë" => "e", "Í" => "i", "Ě" => "e", "Ď" => "d", "Đ" => "d",

"Ń" => "n", "Ň" => "n", "Ó" => "o", "Ô" => "o", "Ö" => "o", "Ř" => "r", "ń" => "n","&amp;" =>"-", "&" => "-",

"ő" => "o", "ű" => "u", "ţ" => "t", "ý" => "y",":" => "-", '.' =>"-", ',' => "-",

"'" => "-", '"' => "-", "!" => "-", '\\' => "");

$uri = strtr($uri, $hemzy);//nahradí znaky podle pole $hemzy

$uri = preg_replace("/(\.)|(\.){1,}|(\|)|(\|){1,}|(\+){1,}|(\%){1,}|(\*){1,}| (\?)|(\?){1,}/", "", $uri);

$uri = preg_replace("/(.*)\-$/", "\\1",$uri); //odstraní pomlčku na konci řetězce

$casti=explode(" ",$uri); //hodí obsah $uri do pole $casti, oddělovník jsou mezery

$uri = implode($separator, $casti); //spojí pole $casti zpět do stringu, spojovník je $separator

$uri=preg_replace("/(-){2,}/","-",$uri); //odstraní přebytečné pomlčky

$uri = preg_replace("/^(-)(.*)$/","\\2", $uri); //odstraní pomlčky na začátku řetězce

if ($maxlength !== false && is_int($maxlength) && $maxlength < strlen($uri))

{

$uri = substr($uri, 0, $maxlength);

$uri = substr($uri, 0, strrpos($uri, $separator));

}

return $uri;

}

Vypadá to hrozně ale funguje.
Nejprve byl problém s funkcí strlower() protože sice převáděla velká písmena na malá, ale jen ty bez diakritiky, takže jsem musel doplnit pole s náhradami o velka písmena s diakritikou.
No a potom jsem musel nahradit funkci která hodi celý text do pole jinou, která to umí taky
To je myslím vše
krteczek
koudi
Profil
Trochu sem si mezitím vyhrál, takže už to nějak fungovalo, ale díky.
krteczek: vypadá to velice dobře, díky
koudi
Profil
a jeste neco, když už sme u toho seo uri :)
je lepší používat sever/neco.htm (nebo php) X server/neco/ ?

Teď nemyslim z hlediska vyhledávaču apod., prostě mě jenom zajímá, co je tak obecně lepší.
Martin
Profil
myslím, že je to způsobeno rozdílností verzí php: haloganova funkce je napsána již s použitím php5 funkcí.
které funkce to prosím jsou? Nějak ty nové funkce pro php5 nevidím.

koudi
zkoušel jsi nahradit
preg_match_all("/w+/", $uri, $casti);
tímto
preg_match_all("/\w+/", $uri, $casti);
koudi
Profil
Martin
nezkoušel, použil sem rovnou krteczkuv skript, ale jen tak pro zajimavost to zkusim
koudi
Profil
Martin
Tak jo, funguje to.
koudi
Profil
A ještě: jak to teda vidíte s tim koncem tý adresy ("/" X ".neco")?
Martin
Profil
Založ si na to nové téma. Podle mě to vyjde na stejno, ale nejsem odborník na SEO.
koudi
Profil
Martin
To sem nechtěl, protože mi to nepřišlo až tak podstatný


krteczek
to, že ten tvuj skript nahrazuje š -> a, ž -> l má nějaký hlubší smysl, nebo je to prostě chyba?
halogan
Profil
Dobry den,
omlouvam se, to lomitko bylo odstraneno systemem. Jaksi to prehnaly stripslashes
koudi
Profil
halogan
není se zač omlouvat, já spíše děkuji za ten kód ;-)
halogan
Profil
koudi: No, je to dost prasacky napsany. Casem tam budu dodelavat dve ficurky: francouzstinu a rustinu.
koudi
Profil
halogan
ale funguje to a nemusel sem se s tím dlouho psát, což bylo přesno to řešení, které sem zrovna potřeboval. Bohužel sem potom zjistil (když už sem měl všechno hotovo), že hosting nepodporuje .htaccess :(.

francouština a ruština? slušná exotika :).
krteczek
Profil
koudi: TO VYPADÁ NA FREE PIPNI :-(,
krteczek
Profil
Martin: no já nepátral potom proč to nefunguje, mi php nebralo už funkci mb_strlower(); prostě ji neznalo, odvodil jsem od toho že tahle funkce bude ve vyžší verzi a napadla mne 5, ted sem se koukal do manualu a našel jsem že je podporována až od php4.3.0, můj domácí server má nižší.
Takže to bylo rozdílem verzi.


koudi:'to, že ten tvuj skript nahrazuje š -> a, ž -> l má nějaký hlubší smysl, nebo je to prostě chyba?
Nechtělo to zmenšovat velká písmena s háčkama tak už jsem nad tím nedumal a vše co se mi povedlo napsat na klávesnici sem dal do tohop skriptu :-)

krteczek
koudi
Profil
krteczek
Taky mi to nezmenšuje velký písmena s háčkama, nevim proč to strtolower nesebere.
halogan
Profil
koudi: Muze to byt treba pouzivanim UTF-8, s nim prave muj script pocita.
koudi
Profil
halogan
Jenže já utf-8 (tady) nepoužívám. Ale to je jedno, stejně mam php kde mb_ funkce nejsou.
arcadosi
Profil
Naco to cele je ?
koudi
Profil
arcadosi
Z nějakýho textu (zde se bavíme hlavně asi o nadpisech stránky) ti to udělá 'SE friendly' text - pro použití s mod_rewrite. Hodně se to používá kvůli SEO.
Toto téma je uzamčeno. Odpověď nelze zaslat.