PDA

View Full Version : Räkna tecken+html


UrMe
2007-07-03, 13:09
Jag har en post i en databas som ser ungefär ut så här:

<span class="text">saddasasddasdsa sda d asd asd</span><br /><br /><span class="text2">sad dsa asd sda asd asd asd dsa sda asd asd asd asd asd asd sa asd asd asd<br />asd asd asd das asd asd asd asd asda sda sa as asd<br />asd asd asd asd asd ads ads ad ad</span>

Jag är inte skyldig till hur datan sparas :)

Om det vill sig riktigt illa kan det ibland vara 3-4 <span> saker efter varandra utan egentlig anledning.

Det jag skulle vilja göra är att begränsa antalet tecken, t.ex:


Response.Write Left(rs("text"), 50)


Problemet med detta är ju att den räknar tecknen i <span> och <br /> etc. Går det på något enkelt sätt att räkna bara tecken som inte finns inom "<>" och räkna tecken inom "<>".

Eftersom jag vill ju inte skriva ut 10 tecken och de 10 tecknena är bara "<span clas"

Samtidigt vill jag inte räkna alla <span> <br> etc heller, eftersom de som är efter de 50 tecknen jag vill ha ut är ointressant.

För <span> måste ju ändå skrivas ut för att formatteringen ska bli rätt.

Hoppas någon förstår mitt dilemma ;)

Melitta
2007-07-03, 13:46
Blir krångligt med den kunskap jag besitter (inte så stor).. Ta och rensa på all html först och krymp strängen sedan då?

voigtann1
2007-07-03, 13:56
Function newLeft(str,length)
With New RegExp
.Global = True
.Pattern = "(<[^<>]*>)"
str = .Replace(str, "")
End With
newLeft = Left(str & "",length)
End Function

Melitta
2007-07-03, 13:57
Typ så ja :D

voigtann1
2007-07-03, 14:05
ändra "(<[^>]*>)" till "(<[^<>]*>)" ;)

UrMe
2007-07-04, 08:35
Det där fungerar ju :) Fast problemet är att jag vill ha tillbaka de html-taggar som behövs.

T.ex

Detta är min text i databasen:

<span class="rubrik">Min rubrik</span><br><br><span class="text">asd asd asd asd asd asd</span><br><span class="text">tjo tjo tjo tjo tjo tjo</span>


Om jag t.ex vill ha ut 20 tecken. Så ska det vara dessa:
"Min rubrik asd asd as"

Så långt funkar ju den funktionen, det jag vill göra nu är att lägga tillbaka html-taggarna som behövs.
"<span class="rubrik">Min rubrik</span><br><br><span class="text">asd asd as"
Vill att min "output" ska se ut som ovan om man väljer 20 tecken.

sista </span> går ju att lägga tillbaka "manuellt".

Men hur skulle man lösa detta? Går det att lösa? :)

voigtann1
2007-07-04, 09:57
Du ska ju inte använda den för att spara till databasen.. bara när du läser av den på den plats du vill? gör någon egen Min Rubrik och kör en replace på det? eller lägg det i en egen tabell i databasen? Annars kan man väl göra en Count funktion ... eller bryta din text efter en </span> ;)

voigtann1
2007-07-04, 10:45
Function newLeft(str,length)
Dim Header, Content
With New RegExp
.Global = True
.Pattern = "(<span class=""rubrik"">[^<]*</span><br><br><span class=""text"">)(.*)"
Header = .Replace(str, "$1")
Content= .Replace(str,"$2")
.Pattern = "(<[^<>]*>)"
Content = Left(.Replace(Content,""),length) & "</span>"
End With
newLeft = Header & Content
End Function Rätt klumpigt skrivit dock.. men fungera ;)... hoppas jag

UrMe
2007-07-04, 11:17
Nackdelen är att du inte vet själva "pattern", inte alltid att rubrik följt av två br och sedan klassen text kommer :(

Det blir nog en väldigt knepig funktion :) Kanske får kolla på en alternativ lösning.

voigtann1
2007-07-04, 11:45
så... du vill ta bort alla taggar förutom <span.....> rätt?

colione
2007-07-04, 11:48
Nej, han vill räkna alla tecken som inte är html-kod om jag har uppfattat han rätt. Han vill alltså räkna de tecknen som besökaren på siten ser, inte tecknena som formaterar texte, dessa vill han dock ha kvar i utskriften.

Enligt min uppfattning ivf.


Edit ->
En lösning skulle ju kunna vara att först strippa bort alla taggar och räkna tecknena, sedan räkna alla tecken i taggarna som finns innan man ska bryta. Plussa på det senare värdet till det första värdet.

voigtann1
2007-07-04, 11:54
Nej, han vill räkna alla tecken som inte är html-kod om jag har uppfattat han rätt. Han vill alltså räkna de tecknen som besökaren på siten ser, inte tecknena som formaterar texte, dessa vill han dock ha kvar i utskriften.Nej.. han vill behålla vissa taggar för sitt presentations lager.. så det är inte att bara rensar all html (vilket min första kod gjorde). Han vill behålla _vissa_ kodsuttar i början bara dom avslutas också efter x antal tecken?

colione
2007-07-04, 11:56
Ja? Läs mitt inlägg igen voigtann1. Det är ju det jag skriver. Han vill egentligen bara räkna tecknena som besökaren ser. Men han vill ha med html-taggarna i utskriften.

UrMe
2007-07-04, 12:00
Ja det är precis som colione skriver, och jag vill bara printa ut de html-taggar som har något att göra med de tecknen som användaren ser. Knepigt :)

voigtann1
2007-07-04, 12:02
Kan väl göra som colione skrev... hämta ut de första 50 tecknen som finns i databasen.. räknar ut hur många avslut det finns kontra hur många "öppningar" av taggar det finns...