S Swey Medlem sedan apr. 2000 3 971 inlägg Frågan 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);
------------------
/mvh Swey
Programmera PHP
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).
------------------
1010011010 - The binary number of the beast
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!
------------------
/mvh Swey
Programmera PHP
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?
------------------
/mvh Swey
Programmera PHP
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?
------------------
1010011010 - The binary number of the beast
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 :)
------------------
/mvh Swey
Programmera PHP
spango Medlem sedan juni 2000 8 205 inlägg varför ha
([^ >\n\t\r]+)
när man kan ha
(\S+)
i stället?
------------------
-- spango
Släpp fram mig, jag är webbdesigner!
S Swey Medlem sedan apr. 2000 3 971 inlägg Hur menar du?
------------------
/mvh Swey
Programmera PHP
S Swey Medlem sedan apr. 2000 3 971 inlägg Förklara. Får inte \S att fungera. Vad gör den?
Tack :)
------------------
/mvh Swey
Programmera PHP
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(?).
------------------
- Swey
Projekt wF PHP
[Redigerat av Swey den 13 jul 2000]
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.
------------------
- Swey
Projekt wF PHP
[Redigerat av Swey den 15 jul 2000]
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 ;)
------------------
- Swey
Projekt wF PHP
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