Autor Zpráva
MartyK
Profil *
Dobry den,

v guestbooku automaticky prepisuju text, ktery zacina na http://neco na odkaz. Pouzivam nasledujici regularni vyraz a funkci ereg_replace:

ereg_replace('(.*)(http:\/\/[_a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}[-_~&=\?\. \%a-zA-Z0-9\/\-\#]*)(.*)', '\\1<a href="\\2"> odkaz </a>\\3', $text);

Problem je v tom, ze kdyz se v textu objevi vice "http://neco" prepise jen prvni na odkaz, ostatni zustavaji nedotcene. Chtel bych, aby to prepisovalo vsechny "http://neco".

Predem dekuji moc za odpoved.
jonge
Profil
Ereg_replace je (co jsem četl) ze všech regulárů nejpomalejší. Používej preg_replace:

<?php
$text = "Strana: http://www.seznam.cz/ nebo http://www.centrum.cz/";
$text = preg_replace("/(http:\/\/www\.[-a-zA-Z0-9]+\.[a-zA-Z0-9]+)/", "<a href=\"$1\">$1</a>", $text);

echo $text;
?>

Toto mi funguje. Zkus si to upravit podle tvého vzoru.
Retal
Profil
jonge
A co když ten regexp narazí na osvícené správce, kteří nepoužívají "www"? :)
k
Profil *
staci aby odkaz vedl na subdomenu.
http://www.seznam.cz/moje-auto to taky nepobere.
jonge
Profil
Tak jsem ti to trochu upravil... snad už si to upravíš víc sám.

<?php
$text = "Strana: http://www.seznam.cz/ nebo http://www.centrum.cz/";
$text = preg_replace("/(http:\/\/www\.|www\.|http:\/\/)/", "http://www.", $text);
$text = preg_replace("/(http:\/\/[\.\-_a-zA-Z0-9]+\.[-a-zA-Z0-9]+\.[-_~&=\?\.\ %\/\-\#a-zA-Z0-9]+)/", "<a href=\"$1\">$1</a>", $text);

echo $text;
?>
Toto téma je uzamčeno. Odpověď nelze zaslat.