Admini Posted April 12, 2005 Share Posted April 12, 2005 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] Link to comment Share on other sites More sharing options...
m a r c u s Posted April 12, 2005 Share Posted April 12, 2005 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] Link to comment Share on other sites More sharing options...
Admini Posted April 12, 2005 Author Share Posted April 12, 2005 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 Link to comment Share on other sites More sharing options...
m a r c u s Posted April 12, 2005 Share Posted April 12, 2005 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. Link to comment Share on other sites More sharing options...
Admini Posted April 12, 2005 Author Share Posted April 12, 2005 Jag får felmeddelande: Microsoft VBScript compilation error [color="#006400"]'800a03ea' [/color] Syntax error forum.asp, line 224 [color="#0000ff"]Function[/color] FormatText( Meddelandet ) ^ Link to comment Share on other sites More sharing options...
m a r c u s Posted April 12, 2005 Share Posted April 12, 2005 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] Link to comment Share on other sites More sharing options...
Admini Posted April 12, 2005 Author Share Posted April 12, 2005 Så här ser min kod ut: [color="#0000ff"]Function[/color] FormatText( Meddelandet ) sText = [color="#0000ff"]Replace[/color]( Meddelandet, [GRÅ]"<"[/GRÅ], [GRÅ]"<"[/GRÅ] ) sText = [color="#0000ff"]Replace[/color]( Meddelandet, [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Å] 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] Link to comment Share on other sites More sharing options...
m a r c u s Posted April 12, 2005 Share Posted April 12, 2005 Då föreslår jag att du byter tillbaka till det jag skrev i förra inlägget. Link to comment Share on other sites More sharing options...
Admini Posted April 12, 2005 Author Share Posted April 12, 2005 Jag förstår inte riktigt vad det är jag ska byta tillbaka... Link to comment Share on other sites More sharing options...
m a r c u s Posted April 12, 2005 Share Posted April 12, 2005 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. Link to comment Share on other sites More sharing options...
Admini Posted April 12, 2005 Author Share Posted April 12, 2005 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 ) Link to comment Share on other sites More sharing options...
m a r c u s Posted April 12, 2005 Share Posted April 12, 2005 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? Link to comment Share on other sites More sharing options...
Admini Posted April 12, 2005 Author Share Posted April 12, 2005 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! Link to comment Share on other sites More sharing options...
m a r c u s Posted April 12, 2005 Share Posted April 12, 2005 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. Link to comment Share on other sites More sharing options...
Admini Posted April 13, 2005 Author Share Posted April 13, 2005 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 Link to comment Share on other sites More sharing options...
m a r c u s Posted April 13, 2005 Share Posted April 13, 2005 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] Link to comment Share on other sites More sharing options...
Admini Posted April 13, 2005 Author Share Posted April 13, 2005 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 Link to comment Share on other sites More sharing options...
Admini Posted April 15, 2005 Author Share Posted April 15, 2005 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 Link to comment Share on other sites More sharing options...
m a r c u s Posted April 15, 2005 Share Posted April 15, 2005 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. Link to comment Share on other sites More sharing options...
Admini Posted April 15, 2005 Author Share Posted April 15, 2005 Hur det ska gå till med RegExp har jag ingen omedelbar idé om. Men kanske senare? Mycken tack och poäng lovas ... Link to comment Share on other sites More sharing options...
Bellfalasch Posted April 15, 2005 Share Posted April 15, 2005 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] Link to comment Share on other sites More sharing options...
Admini Posted April 18, 2005 Author Share Posted April 18, 2005 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 Link to comment Share on other sites More sharing options...
Bellfalasch Posted April 18, 2005 Share Posted April 18, 2005 [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] Link to comment Share on other sites More sharing options...
Admini Posted April 18, 2005 Author Share Posted April 18, 2005 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. Link to comment Share on other sites More sharing options...
Bellfalasch Posted April 18, 2005 Share Posted April 18, 2005 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. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.