Just nu i M3-nätverket
Gå till innehåll

Skapa hyperlänk


Admini

Rekommendera Poster

Hej

Vilket är bästa sättet att göra en url till en hyperlänk när en användare skriver en adress typ: www.mindomän.com eller: eforum.idg.se i ett inlägg?

 

 

Så att när den visas så kan man klicka på den och gå till den adressen.

 

Hur görs det här på eforum?

 

Lägger man a href-taggarna direkt i inlägget och in i databasen eller lägger man till dem när den ska visas i browsern?

 

Tack

 

[inlägget ändrat 2005-04-12 11:03:03 av Admini]

Länk till kommentar
Dela på andra webbplatser

m a r c u s

Det bästa är (enligt mig) att göra all formatering när du tar ut data från databasen. T ex med följande funktion:

 

	[color="#0000ff"]Function[/color] FormatText( sText )

	sText = [color="#0000ff"]Replace[/color]( sText, [GRÅ]"<"[/GRÅ], [GRÅ]"<"[/GRÅ] )
	sText = [color="#0000ff"]Replace[/color]( sText, [GRÅ]">"[/GRÅ], [GRÅ]">"[/GRÅ] )

	[color="#0000ff"]Set[/color] oRegExp = [color="#0000ff"]New[/color] RegExp
	oRegExp.Global = [color="#0000ff"]True[/color]
	oRegExp.IgnoreCase = [color="#0000ff"]True[/color]

	[color="#006400"]'e-mail[/color]
	oRegExp.Pattern = [GRÅ]"([a-z]+[\w\.-_]*\@[a-z0-9]+((\.|-)[a-z0-9]+)*\.[a-z]{2,4})"[/GRÅ]
	sText = oRegExp.[color="#0000ff"]Replace[/color](sText, [GRÅ]"<A href='mailto:$1'>$1</A>"[/GRÅ])

	[color="#006400"]'internet-adress[/color]
	oRegExp.Pattern = [GRÅ]"((h t t p://|h t t p s://|f t p://)\S+(\?\S*)?[^\)\s])"[/GRÅ]
	sText = oRegExp.[color="#0000ff"]Replace[/color]( sText, [GRÅ]"<A href='$1' target='_blank'>$1</A>"[/GRÅ] )

	sText = [color="#0000ff"]Replace[/color]( sText, vbNewLine, [GRÅ]"<BR>"[/GRÅ] )

	FormatText = sText

[color="#0000ff"]End[/color] [color="#0000ff"]Function[/color]

 

Finns kanske bättre pattern för RegExp:en.

 

 

Här försöker visst eforum skapa länkar av mitt pattern. Ta bort mellanslagen i http, https och ftp. Sen ska det stå "& l t;" och "& g t;" (utan mellanslag) som tredjeargument i replace-funktionerna högst upp. Det här var något för buggrapporten...

 

 

 

 

[inlägget ändrat 2005-04-12 11:26:51 av m a r c u s]

Länk till kommentar
Dela på andra webbplatser

Oj oj då! Det märks att jag varit borta länge...

Är detta asp? vad gör dollartecknen där?

senast jag såg $ så var det i php.

 

sText = Replace( sText, "<", "<" )

 

varför ska man ersätta "<" med "<" ?

 

tack

 

Länk till kommentar
Dela på andra webbplatser

m a r c u s

Regular expressions finns lite överallt. Smidiga att använda till mycket. $1 betyder att du klistrar in det som matchade första parentesen i mönstret.

 

Läs min kommentar längst ner för replace-funktionerna.

 

Länk till kommentar
Dela på andra webbplatser

Jag får felmeddelande:

 

Microsoft VBScript compilation error [color="#006400"]'800a03ea' [/color]

Syntax error 

forum.asp, line 224 

[color="#0000ff"]Function[/color] FormatText( Meddelandet )
^

 

 

Länk till kommentar
Dela på andra webbplatser

m a r c u s

Vet inte riktigt hur din kod ser ut men så här borde det vara iaf:

 

[color="#0000ff"]Function[/color] FormatText( sText )
... [color="#006400"]'orörd kod[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]Function[/color]

FormateratMeddelande = FormatText( Meddelandet )

 

 

 

 

 

[inlägget ändrat 2005-04-12 12:06:43 av m a r c u s]

Länk till kommentar
Dela på andra webbplatser

Så här ser min kod ut:

 

[color="#0000ff"]Function[/color] FormatText( Meddelandet )

sText = [color="#0000ff"]Replace[/color]( Meddelandet, [GRÅ]"&lt;"[/GRÅ], [GRÅ]"<"[/GRÅ] )
sText = [color="#0000ff"]Replace[/color]( Meddelandet, [GRÅ]"&gt;"[/GRÅ], [GRÅ]">"[/GRÅ] )

[color="#0000ff"]Set[/color] oRegExp = [color="#0000ff"]New[/color] RegExp
oRegExp.Global = [color="#0000ff"]True[/color]
oRegExp.IgnoreCase = [color="#0000ff"]True[/color]

[color="#006400"]'e-mail[/color]
oRegExp.Pattern = [GRÅ]"([a-z]+[\w\.-_]*\@[a-z0-9]+((\.|-)[a-z0-9]+)*\.[a-z]{2,4})"[/GRÅ]
Meddelandet = oRegExp.[color="#0000ff"]Replace[/color](Meddelandet, [GRÅ]"<A href='mailto:$1'>$1</A>"[/GRÅ])

[color="#006400"]'internet-adress[/color]
oRegExp.Pattern = [GRÅ]"((http://|https://|ftp://)\S+(\?\S*)?[^\)\s])"[/GRÅ]
Meddelandet = oRegExp.[color="#0000ff"]Replace[/color]( Meddelandet, [GRÅ]"<A href='$1' target='_blank'>$1</A>"[/GRÅ] )

Meddelandet = [color="#0000ff"]Replace[/color]( Meddelandet, vbNewLine, [GRÅ]"<BR>"[/GRÅ] )

[color="#0000ff"]End[/color] [color="#0000ff"]Function[/color]

 

 

Länk till kommentar
Dela på andra webbplatser

m a r c u s

Infoga funktionen som den är, utan att ändra något (förutom mellanslag och sådant som jag kommenterade), i din kod. Någonstans där du önskar, fast efter funktionen skriver du:

 

FormateratMeddelande = FormatText( Meddelandet )

 

Jag antar att det ursprungliga meddelandet som du hämtat från databasen finns i Meddelandet. Ditt formaterade meddelade finns efter raden i FormateratMeddelande.

 

Länk till kommentar
Dela på andra webbplatser

OK, det har jag gjort nu.

Men jag får samma fel:

 

Feltyp:
Kompileringsfel i Microsoft VBScript (0x800A03EA)
Syntaxfel
/forum.asp, line 198
[color="#0000ff"]Function[/color] FormatText( sText )

 

 

 

Länk till kommentar
Dela på andra webbplatser

m a r c u s

Funktionen får inte ligga i någon loop, if-sats eller liknande. Mitt förslag är att du lägger den överst i filen. Fungerar det?

 

Länk till kommentar
Dela på andra webbplatser

Du hade rätt; den låg inuti en If-sats.

Men överst på sidan funkar det inte för "Meddelandet" är ännu ingenting.

Jag testade och alla fält från databsen är tomma!

 

 

Länk till kommentar
Dela på andra webbplatser

m a r c u s

Bara funktionen alltså.

 

[color="#0000ff"]Function[/color] Format Text( sText )
...
[color="#0000ff"]End[/color] [color="#0000ff"]Function[/color]

 

Funktionsanropen gör du när du har texten. Då ska allt fungera.

 

Länk till kommentar
Dela på andra webbplatser

Ok, nu har jag placerat den längst ner på sidan och jag anropar den genom Call FormatText(Meddelandet) och det funkar faktiskt.

 

Nu behöver den bara lite justering:

Om en adress är längre än bredden på där den ska visas så spränger adressen bredden och sidan blir ful!

Hur gör jag för att bryta raden med länken utan att dela på den?

 

Tack

 

Länk till kommentar
Dela på andra webbplatser

m a r c u s

Det är nog ett problem många forum och liknande har. T ex detta.

 

http://www.minjättelångaadresssominterymspåenrad.com/ochsåenunderkatalog/ochentill/minsida.html'>http://www.minjättelångaadresssominterymspåenrad.com/ochsåenunderkatalog/ochentill/minsida.html

 

Edit: Nej, tydligen inte. Det var fixat. Då kan man väl kanske klämma in en radbrytning efter ett visst antal tecken.

 

 

Fast hur blir det med text framför: http://www.minjättelångaadresssominterymspåenrad.com/ochsåenunderkatalog/ochentill/minsida.html

 

 

 

 

[inlägget ändrat 2005-04-13 11:34:55 av m a r c u s]

Länk till kommentar
Dela på andra webbplatser

Ja precis så vill jag ha det!

Raden bryter ju utan att länken bryts...

Hur?

Ska man lägga til funktionen i Function Format Text( sText )?

Eller bryta raden "manuellt"?

Några förslag?

Tack

 

Länk till kommentar
Dela på andra webbplatser

Jag har tittat på htmlkoder för den här sidan men kan inte se hur de bryter den långa länken...

Kan inte någon hjälpa mig, snälla!

Tack

 

Länk till kommentar
Dela på andra webbplatser

m a r c u s

Vad de har gjort (som du ser i html-koden) är att sätta in en <br> efter 65 tecken.

 

<a href='...'>...65 tecken...<br>...fler tecken</a>

 

Hur det ska gå till med RegExp har jag ingen omedelbar idé om.

 

Länk till kommentar
Dela på andra webbplatser

Hur det ska gå till med RegExp har jag ingen omedelbar idé om.

 

Men kanske senare? ;)

Mycken tack och poäng lovas ... :)

 

Länk till kommentar
Dela på andra webbplatser

Bellfalasch

Man tar bara resultatet och plockar isär det efter x antal tecken.

 

Man tar då en loop som kör en Mid till en ny variabel. Alltså

 

[color="#006400"]' MyLink = Variabeln med länken.[/color]
[color="#006400"]' NewLink = Variabeln som ska hålla den radbrytna länken.[/color]
[color="#006400"]' found = Vart börjar länktexten?[/color]

found = InStr(MyLink,[GRÅ]""[/GRÅ][GRÅ]">"[/GRÅ]) ' Söker efter ">, alltså slut på href:en.

[color="#006400"]' Len - 4 sätts för att han inte skall bryta </a>[/color]
[color="#0000ff"]For[/color] i = found [color="#0000ff"]To[/color] [color="#0000ff"]Len[/color]( MyLink ) - 4 Step 65 [color="#006400"]' Ändra för att kapa senare / tidigare[/color]
  NewLink = [color="#0000ff"]Mid[/color](MyLink, i, 65) & [GRÅ]"<br />"[/GRÅ]
[color="#0000ff"]Next[/color]

NewLink = [color="#0000ff"]Left[/color]( MyLink, found ) & NewLink [color="#006400"]' Glöm inte början[/color]
NewLink = NewLink & [color="#0000ff"]Right[/color]( MyLink, [color="#0000ff"]Len[/color](MyLink) - i) [color="#006400"]' ... eller slutet.[/color]

 

Vet inte om detta funkar men rent teoretiskt borde det. Jag använder ett litet annat sätt på min sajt för att bryta. Och det är en liten latare grej. Han separerar html-koden i en variabel och länktexten i en annan. Sen lägger jag in mellanslag efter varje & och ? för att länken ska brytas automatiskt. Dock uppstår problem om länken ej innehåller såna. Kan även infoga mellanslag efter /-tecken.

 

[inlägget ändrat 2005-04-15 13:52:36 av Bellfalasch]

Länk till kommentar
Dela på andra webbplatser

Kan nån tyda de olika delarna i följande:

 [GRÅ]"([a-z]+[\w\.-_]*\@[a-z0-9]+((\.|-)[a-z0-9]+)*\.[a-z]{2,4})"[/GRÅ]

 

Vad betyder allting?

 

Även följande:

[GRÅ]"((h t t p://|h t t p s://|f t p://)\S+(\?\S*)?[^\)\s])"[/GRÅ]

 

Eller var någonstans kan jag lära mig om det?

Tack

 

Länk till kommentar
Dela på andra webbplatser

Bellfalasch

[a-z0-9]

a - z och 0 - 9 är godkända värden.

 

(h t t p://|h t t p s://|f t p://)

http:// eller https:// eller ftp://

Alltså | betyder eller.

 

Det var ungefär det jag kunde klura ut. \ används till att infoga specialtecken känns det som. *\ tycks vara nåt slags wildcard.

 

Så alltså: Början av den översta strängen betyder att innan ett @ får valfritt antal tecken finnas. Dessa måste vara a-z, 0-9 eller . - _

\w vet jag inte riktigt vad det kan betyda men måste vara nån slags specialkaraktär.

[a-z]+[\w\.-_]*\@

Alltså används [a-z]+[\w\.-_]* till att validera varje tecken fram tills @.

[inlägget ändrat 2005-04-18 19:14:41 av Bellfalasch]

Länk till kommentar
Dela på andra webbplatser

Kan man med säkerhet säga att detta är Javascript?

Hur gör man i så fall följande i javascript:

sText = Left(minText, 25)

 

Dvs plocka ut de första 25 tecknen ut strängen.

 

 

Länk till kommentar
Dela på andra webbplatser

Bellfalasch

Nej det är inte JavaScript eftersom det skrivs i ASP-koden. RegExp är ett eget objekt i ASP och har sitt egna skrivsätt- Men syntaxen liknar den i t.ex. JavaScript.

 

Så alltså ska du kunna köra med en Left( $1, 25 ) men det strulade ju.

 

Efter lite sökande på MSDN så fann jag en lista som förklarar alla de där krummelurerna:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vspropattern.asp

 

Sen kan du faktiskt göra en fuling. Och det är att inte göra adressen klickbar utan bara skriva "länk" eller "mail" inom a-taggarna. Då ser folk förvisso inte adressen men det gör de i statusfältet vid hover på länkarna.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...