Autor Zpráva
Martin
Profil
Ahoj,
dělám knihu hostů.....když uživatel napíše do té knihy př. www.odkaz.cz aby se to převedlo na <a href="www.odkaz.cz">www.odkaz.cz</a> jaký funkce mám použít? Nebo kde se o tom dá něco dočíst?Díky moc
Martin
Profil
Kámoš mi poradil tohle....funkuje to, ale vůbec se v tom nevyznám
$_POST["zprava"] = EregI_Replace('([^"]|^)(http://[^ ]+\.[^ <>]+)', "\\1<a terget=\"_blank\" href=\"\\2\">\\2</a>", $_POST["zprava"]);
$_POST["zprava"] = EregI_Replace("([^/]|^)(www\.[^ ]+\.[^ <>]+)", "\\1<a target=\"_blank\" href=\"http://\\2\">\\2</a>", $_POST["zprava"]);
Webspy
Profil
Toto je jen kousek skriptu, meti kterým je i skript aby to tvořilo odkazy:

$znak = 66;
$slovo = Split("[[:blank:]]+", $zprava);
for($y=0;$y<Count($slovo);$y++):
$slovo[$y] = Trim($slovo[$y]);
if (Strlen($slovo[$y])<=$znak):
if (EregI("^(www\..+\..{2,3})$", $slovo[$y])):
$odkaz = EregI_Replace("^(www\..+\..{2,3})$", "<a href=http://\\1>\\1</a> ", $slovo[$y]);
elseif (EregI("^(http://.+\..{2,3})$", $slovo[$y])):
$odkaz = EregI_Replace("^(http://.+\..{2,3})$", "<a href=\\1>\\1</a> ", $slovo[$y]);
else:
$odkaz = $slovo[$y] . " ";
endif;
$celek .= $odkaz;
else:
$delit = Ceil(StrLen($slovo[$y])/$znak);
for($z=0;$z<$delit;$z++):
$cast = Substr($slovo[$y], $z*$znak, $znak);
$celek .= $cast . " - ";
endfor;
endif;
endfor;
Martin
Profil
Tohle je zkopčený z intervalu........hezký ale nějak se mi to nepodařilo rozchodit.Dík
llook
Profil
Zkrátka tohle se nejspíš všude řeší pomocí regulárních výrazů. Funkce jako ereg_replace nebo preg_replace.
Nejvíc se to dá zjednodušit asi takhle:

$text = ereg_replace("[ \n\r\t](www\.[^ \n\r\t]+)", '<a href="\1">\1</a>');

Předpokládám už předtím text ošetřený funkcí htmlspecialchars, kvůli validitě a XSS.
VitaZ
Profil
Doporučoval bych Ti nesnažit se o převádění textu na odkazy. Může se Ti stát, že pokud to bude fungovat, návštěvníci Ti zasekají guestbook spamem. Případně si vytvoř jedno pole přímo na odkazy, tam žádné funkce nepotřebiješ :-)
Nzapomeň na htmlspecialchars pro všechny vkládané texty (proměnné)
Anonymní
Profil *
Pořád nevim co je to \1 ..je mi jasný co to vypíše, ale nějak mi to nejde do hlavy
SuE
Profil
ten regulární výraz rozdělí ten řetězec na kousky podle těch kulatých závorek a každý ten kousek má pořadové číslo, na které se dá odkazovat .. ta 1 znamená vše co je v 1. kulaté závorce - tedy to, co jsi vybral .. od www až po mezeru - jedenkrát do href, podruhé jako text odkazu

(ten úplně první výraz je trošku jinak, tam je 1 ty uvozovky a na začátek se dává target , btw blbě napsaný v tom prvním odkazu, 2 je pak samotný odkaz)
doufám, že moc nekecám :-)
pyty
Profil
function make_link($string)
{
$string = ' ' . $string;
$string = preg_replace("#(^|[\n ])([\w]+?://.*?[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\">\\2</a>", $string);
$string = preg_replace("#(^|[\n ])((www|ftp)\.[\w\-]+\.[\w\-.\~]+(?:/[^ \"\t\n\r<]*)?)#is", "\\1<a href=\"http://\\2\">\\2</a>", $string);
$string = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $string);
$string = substr($string, 1);
return $string;
}
Martin
Profil
Všem DÍKY.
Toto téma je uzamčeno. Odpověď nelze zaslat.