Autor Zpráva
lumpy
Profil
prosiiim, neviete mi poradit, ako si v mojej navstevnej knihe spravim nieco take ako je v tomto fore, ze ked napisem http://www.hocico.cz/ tak sa z toho automaticky vytvori odkaz?
Casero
Profil
ereg_replace
djlj
Profil
preg_replace :)
lumpy
Profil
Casero
a nejaky konkretny priklad ako to spravit nemate?
Casero
Profil
no nahradit když najdeš reg.výrazem ereg_replace nebo
preg_replace www.(něco).(něco) a uděláš s toho odkaz <a href... aje to ne??
Casero
Profil
ereg_replace("^www\..+\..+$", "odkaz", $prispevek);" snad nějak takhle by to mělo vypadat $prispevek je jasnej..no a odkaz ta to uděláš normální odkaz zz toho co tam najdeš
lumpy
Profil
Casero
no uplne som to nepochopil..ja tam mam daco taketo:

$meno=strip_tags($meno);
$odkaz=ereg_replace("^www\..+\..+$", "<a href=""></a>", $odkaz);"
$odkaz=strip_tags($odkaz,"<|>,<>,<*>");
$odkaz=nl2br($odkaz);
$cas = date('j.n|H:i');
$f = @fopen("board.dat", "r");
$old = @fread($f, @filesize("board.dat"));
@fclose($f);

pricom ale neviem, co mam napisat do tej zvyraznenej casti.. (ta premenna odkaz je vlastne prispevok od cloveka)
krteczek
Profil
Snad je to bez chyb... vytáhl jsem to z jedné me funkce a upravil pro okamžité použití, ale nezkoušel.

function preved_na_odkazy($vstup)
{
//nejprve musíme z $vstup vytvořit pole slov
$text=explode(" ",$vstup);
$p=count($text);
$vystup='';
$max_delka_slova=25;
for($j=0;$j<$p;$j++)

{

$zpracuj=0;
//zjistujeme jestli je to odkaz začínající na www.

//pokud ano převedeme ho na odkaz.

if(strlen($text[$j])>3)

{

$adresa=substr($text[$j], 0, 4);

if(($adresa=='www.'))

{

$vystup.=' <a href="http://'.$text[$j].'">';

if(strlen($text[$j])>$max_delka_slova)

{

//pokud je adresa dlouhá zkrátíme ji na $max_delka_slova znaků

//(jen to co je vidět na stránce)

$vystup.=substr($text[$j], 0,$max_delka_slova);

}

else

{

$vystup.=$text[$j];

}

$vystup.='...</a> ';
$zpracuj=1;

}

}

//ověříme jestli se jedná o http(s)://, ftp://

//pokud ano převedeme celé slovo na odkaz

if(strlen($text[$j])>6)

{

$adresa=substr($text[$j], 0, 6);

if(($adresa=='http:/') or ($adresa=='https:') or($adresa=='ftp://') or ($adresa=='ftps:/'))

{

$vystup.=' <a href="'.$text[$j].'">';

//pokud je adresa dlouhá zkrátíme ji na $max_delka_slova znaků

//(jen to co je vidět na stránce, adresa zůstane nezměněná)

if(strlen($text[$j])>$max_delka_slova)

{

$vystup.=substr($text[$j], 0,$max_delka_slova);

}

else

{

$vystup.=$text[$j];

}

$vystup.='...</a> ';

$zpracuj=1;

}

}

if($zpracuj==0)
{
$vystup.=$text[$j]." ";
}
}
$vystup=trim($vystup);
$text='';
unset($text);
return $vystup;
}

použití je následovné:

$text=preved_na_odkazy($text);

krteczek
gaminn
Profil *
Takové monstrum snad ani není potřeba ne? Jeden preg_replace by tohle všechno měl dokázat nahradit.
krteczek
Profil
gaminn: jo já špatně četl, myslel jsem převod odkazů v textu správy, a tohle je přesně na to určené, parsuje to celý text a případný výskyt slov začínající www nebo http:/ nahradí odkazem
krteczek
gaminn
Profil *
krteczek
Však ano, já jen, že se to dá smrsknout na jeden řádek.
lumpy
Profil
gaminn
tak ukaz ako ;)
gaminn
Profil *
$text = preg_replace('/((http:\/\/)|(www\.))([^ ]+[^,. ])/', '<a href="http://$3$4">$2$3$4</a>', $text);
gaminn
Profil *
pokud tam potřebuješ mít i ftp, https, ftps a já nevím co, tak to stačí jen trochu pozměnit.
Fnesveda
Profil
Taky bych použil gaminnovu metodu spíše neš Krteczekovu...
lumpy
Profil
gaminn
no, ale narazil som na problem, ak si si pozrel moj kod tam hore, tak mam tam pouzitu funkciu strip_tags($odkaz,"<|>,<>,<*>"); ktora zabranuje tomu, aby tam niekdo mohol len tak vlozit php/html kod - to by nebolo dobre..no a tato funkcia ale brani tomu, aby funkcia preg_replace() vytvorila odkaz, nevies ako to obist?
gaminn
Profil *
lumpy

Co ti brání dát strip_tags() ještě před preg_replace() ?? Ach jo, to se mi snad jen zdá...
24k
Profil *
To se ti nezda ;]
Tomek
Profil *
Díky moc gaminn!
Používal jsem ereg_replace a ten parchant nedovedl zpracovat delší odkazy, o tomhle jsem ani nevěděl, moc jsi mi pomohl! :)
Toto téma je uzamčeno. Odpověď nelze zaslat.