webForumDet fria alternativet

Det blir ingen radmatning på mina texter

ASP

22 svar · 654 visningar · startad av fedde

Medlem sedan dec. 1999137 inlägg
Frågan#1

Jag hämtar min text från en accessdatabas. Men den tar bort radmatningarna när jag ska visa den på sidan.

<%=rs("news")%>

Men om jag lägger den som en titel på en länk:

<a href="länk" title="<%=rs("news")%>">länkad text</a>

eller i en textbox:

<textarea cols="49" rows="12" name="news"><%=rs("news")%></textarea>

så visas den rätt.

Tittar jag i access så är det radmatningar i texten. Men inga html-taggar. Är det kanske det jag saknar? I så fall hur ser jag till att den sparar det så?

Medlem sedan feb. 200112 078 inlägg
#2

VbCrLf visas inte i HTML, men det gör <br>.

<%=replace(rs("news"),VbCrLf,"<br>")%>
Medlem sedan dec. 1999137 inlägg
#3

Tack. Det funkade bra.

Men måste jag skriva så varje gång jag vill visa texten. Eller ska jag ändra på min sparning av texterna?
Hur brukar de flesta hanskas med texter?

Medlem sedan juni 200032 967 inlägg
#4

Gör den ersättningen när du skall visa texten, inte när du sparar den.

Du kan ju skapa en funktion som gör ersättningen åt dig, så är det inte lika "kladdigt" varje gång. Exempel:

Function replaceText(strText)
       replaceText = Replace(strText, vbCrLf, "<br>")
End function

' ...

Response.write replaceText(objRS("fldText"))

Denna funktion kan du ju då fylla på med fler ersättningar, om du skulle vilja, och få alla enkelt utförda på en enda gång.

Mvh

Medlem sedan feb. 200112 078 inlägg
#5

Ville bara påpeka att inte göra misstaget att ersätta alla VbCrLf i databasen mot <br> (alltså så att det står <br> i databasen), för då förlorar själva dynamiken sin mening.

Det är bättre (och egentligen det enda vettiga) att skriva en funktion som @nders gjorde, och sedan inkludera denna på de sidor där du behöver den med include file. Försök alltid att gå efter att du aldrig skall behöva ändra något på mer än ett ställe i applikationen, varje gång du gör en ändring.

Medlem sedan dec. 1999137 inlägg
#6

Ok. Tack ska ni ha!
:bire

Medlem sedan dec. 1999137 inlägg
#7

(Jag drar upp en gammal tråd. Men då behövs inte allt upprepas igen)

Mitt problem är precis som i första inlägget. Men nu hämtar istället från en XML-fil och funktionen hittar inga radmatningar att byta ut till <br>.

Medlem sedan juni 200032 967 inlägg
#8

Du får nog visa kod och exempeldata om du vill att vi ska förstå vad du har problem med.

Medlem sedan dec. 1999137 inlägg
#9

Ok. Tänkte att första inlägget förklarade mitt problem. Men jag försöker förklara igen:

Jag hämtar data får en XML-fil. I den har jag vanliga radmatningar:
Ex:

<data>
<huvudgrupp id="1000">
	<produktgrupp id="100">
		<produkt id="1">
			<name>Vara Ett</name>
			<antal>100</antal>
			<info>Längre löpande text med lite radmatningar.</info>
		</produkt>
		<produkt id="2">
			<name>Vara två</name>
			<antal>200</antal>
			<info>Längre löpande text med lite radmatningar.
			Löpande text Löpande text Löpande text 
			Löpande text 
			Löpande text Löpande text Löpande text Löpande text Löpande text 
			Löpande text Löpande text.</info>
		</produkt>
	</produktgrupp>
</huvudgrupp>
</data>

Jag hämtar texten med bl.a:

Set objNamedNodeMapPG = xmlDoc.documentElement.childNodes(I).childNodes(J)
	intPGAttId = objNamedNodeMapPG.attributes.getNamedItem("id").text
	intPGAttName = objNamedNodeMapPG.attributes.getNamedItem("name").text

och skriver ut den med:

Response.Write  "new Array(""" & intPGAttName & """, " & intPGAttId & ")," & vbCrLf

Men då visas texten löpande. Dvs. utan radbrytningar. Tittar jag på "visa källa" så finns det radbrytningar men inga <br>. Så browsern kan ju inte visa rätt.

Sätter jag texten i ett textfält blir det rätt.

<textarea cols="49" rows="12" name="text"><%=intPGAttName%></textarea>

Säkert något uppenbart jag missat eller?

Medlem sedan dec. 19996 721 inlägg
#10

fedde skrev:

Säkert något uppenbart jag missat eller?

Japp. Har du använt lösningen på ditt förra problem?

Medlem sedan dec. 1999137 inlägg
#11

emission skrev:

Japp. Har du använt lösningen på ditt förra problem?

Visst har jag det. Men utan resultat.

function fixRadmatningar(fix)
fix = Replace(fix,"¶", "<br>")
fix = Replace(fix,"vbCrLf", "<br>")

fixRadmatningar = fix
end function

strInfo = fixRadmatningar(strInfo)
response.write "ID: " & strID & " <b>" & strName & "</b><br>Lager: " & strAntal & " st<br>Info: " & strInfo & vbcrlf

Testade att sätta tecknet ¶ efter varje rdbrytning i XML-filen och bytte ut det i funktionen ovan. Det funkar. Men radbrytningen hittar den inte.

Medlem sedan dec. 19996 721 inlägg
#12

Du har satt citationstecken runt vbCrLf

function fixRadmatningar(fix)
fixRadmatningar  = Replace(fix,vbCrLf, "<br>")
end function

strInfo = fixRadmatningar(strInfo)
response.write "ID: " & strID & " <b>" & strName & "</b><br>Lager: " & strAntal & " st<br>Info: " & strInfo & vbcrlf
Medlem sedan dec. 1999137 inlägg
#13

Hoppsan :r
Men tyvärr hjälpte det inte ändå.

Medlem sedan dec. 19996 721 inlägg
#14

Du skulle kunna prova med vbCr eller vbLf i stället, om det råkar vara så att du fått en icke-Windows-radbrytning. Eftersom du ser radbrytningar i källan så finns det i alla fall någon form av radbrytning.

Medlem sedan dec. 1999137 inlägg
#15

Nope, inte det heller... Skumt!

Börjar fundera på om det är XML-filens format som spökar. Detta är mitt första test med XML. Så jag är en aningen osäker på vad jag håller på med :OO

Överst i XML-filen står det:

<?xml version="1.0" encoding="ISO-8859-1"?>

Rätt / fel?

Medlem sedan dec. 1999137 inlägg
#16

Kom visst in på rätt spår. XML-filen är visst binär enligt denna tråd.

Så Chr(10) var lösningen.

function fixRadmatningar(fix)
   fixRadmatningar  = Replace(fix, [B]Chr(10)[/B], "<br>")
end function

strInfo = fixRadmatningar(strInfo)

response.write strInfo

Tack emission för dina försök!

Är en XML-fil alltid binär? Eller hur funkar det?
Jag har precis som erik_nordell i tråden ovan Microsoft.XMLDOM. Är det bra eller ska man använda annat?

Dim xmlDoc, fil
set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
fil=Server.mappath("" & strXMLfile_products & "")
xmlDoc.load(fil)
Medlem sedan dec. 19996 721 inlägg
#17

fedde skrev:

Kom visst in på rätt spår. XML-filen är visst binär enligt denna tråd.

Så Chr(10) var lösningen.

Har du verkligen provat med vbLf?? vbLf är nämligen chr(10)!

vbCrLf = chr(13) & chr(10)
vbCr = chr(13)
vbLf = chr(10)

CR står för Carriage Return (vagnretur), LF för Line Feed

fedde skrev:

Tack emission för dina försök!

Tack för tack :)

fedde skrev:

Är en XML-fil alltid binär?

Nej, en XML-fil är aldrig binär (i strikt mening är alla filer binära, men inte i den mening som brukar avses med distinktionen textfil/binärfil). Det som avsågs i den andra tråden var nog att ett XML-dokument hämtats med XMLHTTP och plockats ut som binärdata mha responseBody.

Medlem sedan dec. 1999137 inlägg
#18

emission skrev:

Har du verkligen provat med vbLf?? vbLf är nämligen chr(10)!

Jag provade flera varianter (se nedan). Men nu när jag testade vidare så kom jag på att om jag även körde sista raden i funktionen så fungerar det inte. Det var det som sabbade det hela... Jag hade sista raden aktiv hela tiden...
:r Men jag är inte riktigt med på varför den raden sabbade det.

Så du tipsade helt rätt innan!!! :birp

function fixRadmatningar(fix)
'fixRadmatningar  = Replace(fix, Chr(13), "<br>") 'Funkar ej
'fixRadmatningar  = Replace(fix, Chr(10), "<br>")  'Funkar göörbra!!
'fixRadmatningar  = Replace(fix, vbCrLf, "<br>")  'Funkar ej
'fixRadmatningar  = Replace(fix, vbCr, "<br>")  'Funkar ej
fixRadmatningar  = Replace(fix, vbLf, "<br>")  'Funkar också bra!!!
'fixRadmatningar  = Replace(fix, "¶", "<br>") 'Söker upp tillagda ¶-tecken på radslut
end function
Medlem sedan dec. 19996 721 inlägg
#19

:birp

Anledningen till att det inte funkade är att då var det bara den sista raden som gav resultat. Jag misstänker att det var detta du ville göra..

function fixRadmatningar(fix)
   [blue]fix[/blue]  = Replace(fix, Chr(13), "<br>") 'Funkar ej
   [blue]fix[/blue]  = Replace(fix, Chr(10), "<br>")  'Funkar göörbra!!
   [blue]fix[/blue]   = Replace(fix, vbCrLf, "<br>")  'Funkar ej
   [blue]fix[/blue]   = Replace(fix, vbCr, "<br>")  'Funkar ej
   [blue]fix[/blue]   = Replace(fix, vbLf, "<br>")  'Funkar också bra!!!
   fixRadmatningar  = Replace(fix, "¶", "<br>") 'Söker upp tillagda ¶-tecken på radslut
end function

Bör kanske tillägga att tecknet "¶" inte har något med radbrytningar att göra, annat än att det används för att visualisera sådana i t.ex. ordbehandlare. M.a.o behöver du inte ersätta det. Däremot kan det vara vettigt att ersätta även vbCrLf och vbCr, om du råkar på filer med sådana radbrytningar. Tänk på att du då måste ersätta vbCrLf först, annars kommer dessa att resultera i dubbla "<br>".

Medlem sedan dec. 1999137 inlägg
#20

emission skrev:

Bör kanske tillägga att tecknet "¶" inte har något med radbrytningar att göra, annat än att det används för att visualisera sådana i t.ex. ordbehandlare. M.a.o behöver du inte ersätta det. Däremot kan det vara vettigt att ersätta även vbCrLf och vbCr, om du råkar på filer med sådana radbrytningar. Tänk på att du då måste ersätta vbCrLf först, annars kommer dessa att resultera i dubbla "<br>".

Innan jag fick det att fungera så provade jag med att lägga till ¶-tecknet i slutet på varje rad i xml-filen och sedan ersätta det med <br> ASP-funktionen. Det funkade bra men var bara ett test.
Jag vet vad tecknet används till annars. Valde det tecknet bara för att jag var tvungen att ha ett tecken som normalt inte förekommer i en text. Annars skulle det bli radbrytningar lite här och var...

Allt funkar som sagt. :e Men jag vill förstå varför raderna stör ut varandra och man inte kan köra alla raderna tillsammans (kan vara bra att veta till ett annat tillfälle):

function fixRadmatningar(fix)
fixRadmatningar  = Replace(fix, vbCrLf, "<br>")
fixRadmatningar  = Replace(fix, vbLf, "<br>")
fixRadmatningar  = Replace(fix, vbCr, "<br>")
fixRadmatningar  = Replace(fix, "¶", "<br>") ' Denna raden "vinner" och de ovan funkar inte.
end function

När detta gör det? Vad spelar ordningen för roll?

function fixRadmatningar(fix)
fixRadmatningar  = Replace(fix, "¶", "<br>")
fixRadmatningar  = Replace(fix, vbCrLf, "<br>")
fixRadmatningar  = Replace(fix, vbLf, "<br>")
fixRadmatningar  = Replace(fix, vbCr, "<br>")' Denna raden "vinner" och "¶" funkar inte.
end function

Förresten, ditt sista förslag på funktionen funkar inte. Får ingen data tillbaka om jag skriver så.

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