S Swey Medlem sedan apr. 2000 3 971 inlägg Trådstart 12 juli 2000 20:47 #1 Jag hittade dessa uttryck för att hantera länkar med reguljära uttryck.
Vad gör de och hur man gör för att de ska fungera?
$body = eregi_replace("<(mailto:)([^ >\n\t]+)>", "{phopen}a href=\"\\1\\2\"{phclose}\\2{phopen}/a{phclose}", $body);
$body = eregi_replace("<([http|news|ftp]+://[^ >\n\t]+)>", "{phopen}a href=\"\\1\"{phclose}\\1{phopen}/a{phclose}", $body);
Dom ser lite konstiga ut tycker jag, det kräver att man skriver länkarna inom < > för att det ska funka och det ska man ju inte behöva. Sen vet jag inte riktigt varför {phclose} och {phopen} behövs, vanliga < och > funkar för mig. Testa:
$body1 = eregi_replace("(mailto:)([^ >\n\t]+)", "<a href=\"\\1\\2\">\\2</a>", $body);
$body2 = eregi_replace("([http|news|ftp]+://[^ >\n\t]+)", "<a href=\"\\1\">\\1</a>", $body);
Gör om mailto:namn@server.se och http://www.server.se till länkar (inkl ftp och news).
S Swey Medlem sedan apr. 2000 3 971 inlägg Hittade det där i Phorum som är forum för PHP med PostgreSQL och mySQL. Tyckte också det var lite konstigt.
Men nu fungerar det utmärkt. Tack!
S Swey Medlem sedan apr. 2000 3 971 inlägg Hm... problem...
Det som du postade gör att länkarna inkluderar tecknet efteråt
det blir alltså så här
<a href="url ">url </a>
eller så här
<a href="url
">url
</a>
Lösning?
Testa och lägg in \r i ^-listan:
eregi_replace("(mailto:)([^ >\n\t**\r**]+)", "<a href=\"\\1\\2\">\\2</a>", $body);
eregi_replace("([http|news|ftp]+://[^ >\n\t**\r**]+)", "<a href=\"\\1\">\\1</a>", $body1);
Det borde lösa radmatningen (gör det för mig iaf). Att mellanslaget tas med är konstigt, för den finns ju redan med i ^-listan. Kör du under Windows?
S Swey Medlem sedan apr. 2000 3 971 inlägg Linux på servern och Windows som klient. Kör iofs. hemma också.
Det verkar ha löst sig nu. Vet inte riktigt vad det första berodde på.
Tack
spango Medlem sedan juni 2000 8 205 inlägg varför ha
([^ >\n\t\r]+)
när man kan ha
(\S+)
i stället?
S Swey Medlem sedan apr. 2000 3 971 inlägg Förklara. Får inte \S att fungera. Vad gör den?
Tack
N nicclas Medlem sedan feb. 2000 1 050 inlägg S Swey Medlem sedan apr. 2000 3 971 inlägg aha... får labba lite...
Jag vill lägga till en kriterie. Om länken slutar med en punkt ska inte punkten ingå i länken. Men punkter ska kunna ingå i länken om den inte slutar på den. Den ska alltså sluta när den stöter på punkt och whitespace(?).
N nicclas Medlem sedan feb. 2000 1 050 inlägg Enkelt, fult och långsamt, men det funkar :
<?
$body="Matti har [url="http://www.nic-sys.se/\n"]http://www.nic-sys.se/\n[/url] som startsida! Clas har tröttnat på [url="http://www.nic-sys.se."]http://www.nic-sys.se.[/url] Nicclas tycker att [url="http://www.allanyheter.com"]http://www.allanyheter.com[/url] är coolare!\n\n";
$body = eregi_replace("(mailto:)([^ >\n\t\r]+)", "<a href=\"\\1\\2\">\\2</a>", $body);
$body = eregi_replace("([http|news|ftp]+://([^ \n\r\t]+))\. ", "<a href=\"\\1\">\\1</a>. ", $body);
$body = eregi_replace("([http|news|ftp]+://([^ \n\r\t]+))", "<a href=\"\\1\">\\1</a>", $body);
echo $body;
?>
/nicclas http://www.nic-sys.se/
[Redigerat av nicclas den 15 jul 2000]
S Swey Medlem sedan apr. 2000 3 971 inlägg Tack, skkulle man kunna få in båda de sista i ett uttryck?
Sen fungerar inte \\S för mig. Det söker efter tecknet S.
N nicclas Medlem sedan feb. 2000 1 050 inlägg Ooops... \S verkar bara fungera i Perl-versionen av r.u.'s. Men eftersom PHP även har stöd för Perl-versionen så funkar
<?
$body="Matti har [url="http://www.nic-sys.se/\n"]http://www.nic-sys.se/\n[/url] som startsida! Clas har tröttnat på [url="http://www.nic-sys.se."]http://www.nic-sys.se.[/url] Nicclas tycker att [url="http://www.allanyheter.com"]http://www.allanyheter.com[/url] är coolare!\n\n";
$body=preg_replace("/([http|news|ftp]+:\/\/[\S]+)/", "<a href=\"\\1\">\\1</a>", $body);
echo $body;
?>
/nicclas
Blir det några nyheter, eller?
S Swey Medlem sedan apr. 2000 3 971 inlägg Det fungerar man du glömde punkten
N nicclas Medlem sedan feb. 2000 1 050 inlägg Jo, jag vet, det var med flit. Lösningen med .-en var ju inte så bra... Här fokuserar vi på ett problem i taget.
/nicclas http://www.nic-sys.se