webForumDet fria alternativet

Göra riktiga länkar i texten

Webbutveckling

23 svar · 566 visningar · startad av lillebror

Medlem sedan apr. 20041 597 inlägg
Frågan#1

Hej,

Jag har ett forum och nu vill jag implementera så att det går att skriva länkar i texten, ungefär som här på wF.

Formatet jag tänkt utgå ifrån är detta:

VÄNSTERKLAMMER-URL=http://www.flygfyren.nu]test[/URL-HÖGERKLAMMER

Hur kan ett pregmatch-uttryck se ut så att man i variabeln $1 får "http://www.flygfyren.nu" och "test" i variabel $2?

:)

Medlem sedan juli 20033 147 inlägg
#2

Jag använder mig av den här funktionen (PHP) för att få ut länkar.

function urlEncode($text, $target="_blank"){

	$text = preg_replace("/(?<=^|\s)((https?|ftps?):\/\/)?(([-_a-zA-Z]+\.)+)([a-zA-Z]{2,6})(\/[^\]\[\s]*)?(?=\s|$)/ie","'$1'!=''? '<a href=\"$1$3$5$6\" target=\"$target\">$1$3$5$6</a>':'<a href=\"http://$3$5$6\">$3$5$6</a>'",$text);
	$text = preg_replace("/\[url=((https?|ftps?):\/\/)?(([-_a-zA-Z]+\.)*)([a-zA-Z]{2,6})(\/[^\]\[\s]*)?\]([^\]\[]+)\[\/url\]?/ie","'$1'!=''?'<a href=\"$1$3$5$6\" target=\"$target\">$7</a>':'<a href=\"http://$3$5$6\">$7</a>'",$text);
	$text = preg_replace("/\[url]((https?|ftps?):\/\/)?(([-_a-zA-Z]+\.)*)([a-zA-Z]{2,6})(\/[^\]\[\s]*)?\[\/url\]/ie","'$1'!='' ?'<a href=\"$1$3$5$6\" target=\"$target\">$1$3$5$6</a>':'<a href=\"http://$3$5$6\">$3$5$6</a>'",$text);

	return $text;

}
Medlem sedan apr. 20041 597 inlägg
#3

Är det två olika varianter du har där?

Medlem sedan juli 20033 147 inlägg
#4

Tre. :)
Den översta ersätter vanliga länkar till, länkar.
Den mittersta ersätter [/url ] med en länk och text.
Den understa ersätter [url ] [/url ] med en länk.

Medlem sedan apr. 20041 597 inlägg
#5

Roger that! Då har jag "spelplanen" klar för mig :)

Medlem sedan apr. 20041 597 inlägg
#6

Vad är skillnaden mellan den översta och den understa av alternativen förutom att det är klamrar på den ena?

Medlem sedan juli 20033 147 inlägg
#7

Vad menar du?

Medlem sedan apr. 20041 597 inlägg
#8

Varför inte bara ha ett av alternativen 1 och 3. Den enda skillnaden är ju att den undre har klamrar. Kan man inte nöja sig med att bara ha den första?

Det kanske är jag som tänker galet :e

Medlem sedan juli 20033 147 inlägg
#9

Jovisst funkar det att endast ha den första, men om man nödvändigtvis inte vill att besökarna ska kunna skriva länkar i klartext, utan måste använda sig av klamrar så är trean ett alternativ.
Presenterade bara tre lösningar på det hela, använd de du känner passar ditt ändamål. :)

Medlem sedan nov. 20014 054 inlägg
#10

lillebror skrev:

Vad är skillnaden mellan den översta och den understa av alternativen förutom att det är klamrar på den ena?

Skillnaden på den översta och den understa är att i den översta ersätter den en url till en klickbar url i texten utan att behöva använda sig av url-taggarna som blir specfika för ex. forumet eller i vilket endamål de nu ska användas..

Medlem sedan apr. 20041 597 inlägg
#11

Jag får det inte att fungera. Länktexten görs inte om till länkar i texten. Använder denna kod när jag plockar ut en tråd:

<?php echo nl2br(showSmiley(showForumQuotes(urlEncoder($RSobj_thread['content']))));?>
Medlem sedan juli 20033 147 inlägg
#12

Byta ut urlEncoder till urlEncode. :)

Medlem sedan apr. 20041 597 inlägg
#13

Melea skrev:

Byta ut urlEncoder till urlEncode. :)

När jag infogade funktionen med namnet "urlEncode" fick jag ett konstigt fel att den redan skulle vara delkarerad hos mig. Då satte jag dit ett "r" på slutet för att se om det blev någon skillnad och då fungerade sidan men funktionen verkade fortfarande inte fungera korrekt. Ja menar, allt verkar ju stämma för övrigt så det är lite konstigt.

Följande fel får jag:

Fatal error: Cannot redeclare urlencode() in /xxx/inc/include.function.php on line 468

Så vitt jag vet har jag inte skapat en funktion med liknande namn tidigare. Har sökt igenom mina include-filer.

Medlem sedan aug. 20002 975 inlägg
#14

Det finns redan en funktion 'urlencode' i PHP, ändra funktionens namn till något annat.

Medlem sedan juli 20033 147 inlägg
#15

Matte skrev:

Det finns redan en funktion 'urlencode' i PHP, ändra funktionens namn till något annat.

Attans, det hade jag glömt bort. :)

Medlem sedan apr. 20041 597 inlägg
#16

Det var det jag gjorde tidigare men då påpekade Melea att namnet var fel :) Nu fick jag en förklaring till det hela och att den redan var fördeklarerad i PHP.

Medlem sedan apr. 20041 597 inlägg
#17

Nu har jag bytt namn. Länken blir fortfarande inte till en riktig länk i tråden http://www.flygfyren.nu/forum/showthread.php?threadID=248&forumID=2.

Medlem sedan juli 20033 147 inlägg
#18

Konstigt, för mig funkar det felfritt. Om du byter ordning när du skriver ut texten då?
Lägg urlEncoder efter nl2br.
Kan vara någon annan funktion som spökar till det.

/r Detta funkar.

function urlEncoder($text, $target="_blank"){

    $text = preg_replace("/(?<=^|\s)((https?|ftps?):\/\/)?(([-_a-zA-Z]+\.)+)([a-zA-Z]{2,6})(\/[^\]\[\s]*)?(?=\s|$)/e","'$1'!=''? '<a href=\"$1$3$5$6\" target=\"$target\">$1$3$5$6</a>':'<a href=\"http://$3$5$6\">$3$5$6</a>'",$text);
    $text = preg_replace("/\[url=((https?|ftps?):\/\/)?(([-_a-zA-Z]+\.)*)([a-zA-Z]{2,6})(\/[^\]\[\s]*)?\]([^\]\[]+)\[\/url\]?/e","'$1'!=''?'<a href=\"$1$3$5$6\" target=\"$target\">$7</a>':'<a href=\"http://$3$5$6\">$7</a>'",$text);
    $text = preg_replace("/\[url]((https?|ftps?):\/\/)?(([-_a-zA-Z]+\.)*)([a-zA-Z]{2,6})(\/[^\]\[\s]*)?\[\/url\]/e","'$1'!='' ?'<a href=\"$1$3$5$6\" target=\"$target\">$1$3$5$6</a>':'<a href=\"http://$3$5$6\">$3$5$6</a>'",$text);

    return $text;

}

$text = '
http://www.webforum.nu
[url]http://www.webforum.nu[/url]
[url=http://www.webforum.nu]webForum[/url]
';

echo nl2br(urlEncoder($text));
Medlem sedan apr. 20041 597 inlägg
#19

Nu funkar det! Yeeees! Jag får nog ta på mig det här :e Problemet att det inte fungerade från början berodde på att jag körde med stora bokstäver i URL istället för små som det var i funktionen. Det tänkte jag inte på överhuvudtaget men det är ju klart att det inte går så bra då. Nu ändrade jag till stora. Funktionen fungerar precis som den ska, alla tre alternativen.

Dock kunde jag inte använda mig av citat-tecken i alternativet där man kan skriva in ett länknamn istället för att bara visa länken i klartext. Går det att modda regexp-uttrycket så att det accepterar det? Försökte köra med "\" för citat-tecknet men då syns det i länken när man skriver ut det på skärmen.

Medlem sedan aug. 20002 975 inlägg
#20

Lägg till modifikatorn/växeln 'i' till ditt uttryck, så funkar det på både stora och små bokstäver, typ
/--regexp--/ie

266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)