/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Replace fordobler linieskift ?
Fra : Jakob Munck


Dato : 29-07-02 11:42

Når jeg sender tekst fra en form til en Access-db bruger jeg replace for at
sikre at linieskift vises rigtigt og uheldige tegn erstattes med andre. Det
virker udmærket og foregår med denne kode:

kommentar2 = replace(kommentar2, vbcrlf, "<br>" & vbcrlf)
kommentar2 = replace(kommentar2, """", "&#34;", 1, -1, 1)
kommentar2 = replace(replace(kommentar2, """", "&#34;", 1, -1, 1), "'",
"&#39;", 1, -1, 1)

Men når mine brugere skal have mulighed for at opdatere deres oplysninger,
vil jeg gerne have at det form-felt, hvor oplysningerne står i, ikke viser
<br> ved linieskift, men bare viser disse linieskift. Det kan jeg gøres
sådan:

kommmentar = Rs("kommentar")
kommmentar = replace(kommentar, "<br>", vbcrlf)
response.write kommentar

Men problemet er, at hver gang brugerne opdaterer deres profil (Update....)
så fordobles antallet af linieskift. Det betyder, at der er en fejl i denne
replace-kode:

kommmentar = replace(kommentar, "<br>", vbcrlf)

Den skal erstatte <br> med en et usynligt tegn for linieskift (ASCI-tegn?),
men den erstatter den rent faktisk med 2 gange denne dette tegn, således at
der bliver dobbelt så mange linieskift.

Hvad gør jeg galt?

v.h.
Jakob Munck




 
 
Jakob Andersen (29-07-2002)
Kommentar
Fra : Jakob Andersen


Dato : 29-07-02 12:26

Jakob Munck wrote:
> Den skal erstatte <br> med en et usynligt tegn for linieskift (ASCI-
> tegn?), men den erstatter den rent faktisk med 2 gange denne dette
> tegn, således at der bliver dobbelt så mange linieskift.
> Hvad gør jeg galt?

Når du udskifter dine linjeskift erstatter du jo et vbcrlf med et <br> + et
vbcrlf Altså:

Linie1 <ASCII linjeskift> Linie2
Bliver til:
Linie1 <HTML linieskift><ASCII linjeskift> Linie2

Og når du så igen udskifter dine HTML linieskifts til editering får du
dette:
Linie1 <ASCII linjeskift><ASCII linjeskift> Linie2

Det er her det går galt!

Der er to løsningsmuligheder:

I den linie hvor du skriver:
kommentar2 = replace(kommentar2, vbcrlf, "<br>" & vbcrlf)
Skal du nøjes med:
kommentar2 = replace(kommentar2, vbcrlf, "<br>")

Eller alternativt skal du når du hiver dine data ud af databasen til
editering skrive følgende:

kommmentar = Rs("kommentar")
kommmentar = replace(kommentar, "<br>", "")
response.write kommentar

--
Jakob Andersen



Jakob Munck (29-07-2002)
Kommentar
Fra : Jakob Munck


Dato : 29-07-02 14:35

Der er en tendens til, at der kommer usynlige karakterer, der medfører
linieskift, ind i databasen, det kan jeg se når jeg bruger Update. Jeg er
ikke helt klar over hvorfor.

Er der en måde man kan teste tekststrengen for synlige karakterer. Altså
ikke en test om hvorvidt recordfeltet er tomt, for det er det ikke, men om
det indeholder synlige karakterer?

v.h.
Jakob Munck



Jakob Andersen (29-07-2002)
Kommentar
Fra : Jakob Andersen


Dato : 29-07-02 14:29

Jakob Munck wrote:
> Der er en tendens til, at der kommer usynlige karakterer, der medfører
> linieskift, ind i databasen, det kan jeg se når jeg bruger Update.
> Jeg er ikke helt klar over hvorfor.

Virkede mit forslag ikke?

> Er der en måde man kan teste tekststrengen for synlige karakterer.
> Altså ikke en test om hvorvidt recordfeltet er tomt, for det er det
> ikke, men om det indeholder synlige karakterer?

Mener du ikke for usynlige karaktere? altså søge om der er linjeskift for
meget i?

hvis jeg var dig ville jeg blot rette

Replace( tekst, vbcrlf, "<br>" & vbcrlf )

til

Replace( tekst, vbcrlf, "<br>" )

Så er dit problem løst
--
Jakob Andersen



Jakob Munck (29-07-2002)
Kommentar
Fra : Jakob Munck


Dato : 29-07-02 15:32

Det har jeg skam gjort, og det løste problemet med det stadig større antal
linieskift. Tak for det !

Men så er der andre problemer i den samme funktion. Måske burde jeg starte
en ny tråd ang. disse, men jeg føler at de hører sammen.

1. For det første vil jeg gerne have, at databasefeltet kan være helt tomt,
hvis brugeren ikke har skrevet noget ind i forment. Så kan jeg teste at det
er tomt (apropos tidligere tråd d.d.) og skrive "Ingen kommentarer!". Men
der kommer usynlige karakterer ind i databasen, og jeg ved ikke hvorfra ?
Også når feltet tilsyneladende var tomt, da jeg lavede Update.

2. Når jeg ser det opdaterede felt i den form, som jeg bruger til at lave
update, så er der <br> for hvert linieskift. Det tror jeg forvirrer
brugerne, så jeg ville gerne have, at formfeltet viser sit indhold uden
disse <br>. Altså må jeg konverterer tekststrengen tilbage igen.

Det er lykkedes for mig at løse et eller to af de ovennævnte problemer, men
ikke dem alle tre. Det er derfor jeg stadig søger og spørger.

Med mindre en person kan levere den færdige replace-kode for ind- og uddata
til mig, så det hele bare virker, også med update ?

v.h.
Jakob Munck



Jakob Andersen (29-07-2002)
Kommentar
Fra : Jakob Andersen


Dato : 29-07-02 15:44

Jakob Munck wrote:
> Med mindre en person kan levere den færdige replace-kode for ind- og
> uddata til mig, så det hele bare virker, også med update ?


Data ind i databasen
strData = "Din tekst her"
strData = Replace(Server.HTMLEncode( strData ), vbcrlf, "<br />" )


Data hives ud til editering:
strData = "Data fra databasen her"
strData = Replace( Server.HTMLDecode( strData ), "<br>", vbcrlf )

Og husk så at passe på at der i din kildetekst ikke er linjeskift imellem
<textarea> og </textarea>

--
Jakob Andersen



Jakob Munck (29-07-2002)
Kommentar
Fra : Jakob Munck


Dato : 29-07-02 19:16

Men når jeg forsøger at hive data ud af db på denne måde:

kommentar2 = RS("kommentar")
kommentar2 = Replace( Server.HTMLDecode( kommentar2 ), "<br>", vbcrlf )

så får jeg denne fejlmelding:

"Objektet understøtter ikke denne egenskab eller metode: 'HTMLDecode'"



Hvad gør man så?

v.h.
Jakob Munck




Jørn Andersen (29-07-2002)
Kommentar
Fra : Jørn Andersen


Dato : 29-07-02 19:17

On Mon, 29 Jul 2002 20:15:54 +0200, "Jakob Munck"
<jakob.munck@tdcadsl.dk> wrote:

>Men når jeg forsøger at hive data ud af db på denne måde:
>
>kommentar2 = RS("kommentar")
>kommentar2 = Replace( Server.HTMLDecode( kommentar2 ), "<br>", vbcrlf )
>
>så får jeg denne fejlmelding:
>
>"Objektet understøtter ikke denne egenskab eller metode: 'HTMLDecode'"

Det er fordi den hedder:
Server.HTMLEncode



Good luck!

--
Jørn Andersen,
Brønshøj

Jakob Andersen (29-07-2002)
Kommentar
Fra : Jakob Andersen


Dato : 29-07-02 19:47

"Jakob Munck" <jakob.munck@tdcadsl.dk> wrote
> "Objektet understøtter ikke denne egenskab eller metode: 'HTMLDecode'"

Min fejl, jeg troede faktisk at der fandtes en invers HTMLEncode, men det er
fra .NET jeg husker det.

--
Jakob Andersen
http://www.stresscd.dk/ - Udnyt stress positivt



Jørn Andersen (29-07-2002)
Kommentar
Fra : Jørn Andersen


Dato : 29-07-02 19:24

On Mon, 29 Jul 2002 16:44:23 +0200, "Jakob Andersen"
<jakob@effectus.dk> wrote:

>Jakob Munck wrote:
>> Med mindre en person kan levere den færdige replace-kode for ind- og
>> uddata til mig, så det hele bare virker, også med update ?
>
>
>Data ind i databasen
>strData = "Din tekst her"
>strData = Replace(Server.HTMLEncode( strData ), vbcrlf, "<br />" )

Hvad er funktionen af HTMLEncode i denne sammenhæng?

>Data hives ud til editering:
>strData = "Data fra databasen her"
>strData = Replace( Server.HTMLDecode( strData ), "<br>", vbcrlf )

Ville det ikke være enklere at undlade at gemme <br>'erne i databasen?
Skal de i det hele taget bruges til noget?
Hvis man så får brug for dem, så nøjes med at tilføje dem, når de skal
udskrives.


--
Jørn Andersen,
Brønshøj

Jakob Andersen (29-07-2002)
Kommentar
Fra : Jakob Andersen


Dato : 29-07-02 19:44

"Jørn Andersen" <jorn@jorna.dk> wrote
> Hvad er funktionen af HTMLEncode i denne sammenhæng?

Jeg gik udfra at indholdet skulle vises på et website, altså at der var to
forskellige visningsformer:

1. Når dataene skulle rettes bliver de udskrevet i et textarea.
2. Når dataene skulle vises bliver de blot printet som HTML.

Derfor HTMLEncode, således at brugerne ikke ville opleve mystiske ting hvis
de f.eks. fandt på at skrive "<" eller ">" i textarea.

> Ville det ikke være enklere at undlade at gemme <br>'erne i databasen?
> Skal de i det hele taget bruges til noget?

Jvf. ovenstående skal de bruges til præsentation i HTML, men det kan jo
selvfølgelig være at jeg har misforstået noget.

> Hvis man så får brug for dem, så nøjes med at tilføje dem, når de skal
> udskrives.

Performance mæssigt vil det være mere fordelagtigt at udskifte linebreaks
når dataene gemmes istedet for hvergang de vises. Hvis vi altså antager at
data vises tiere end de rettes.

--
Jakob Andersen
http://www.stresscd.dk/ - Udnyt stress positivt



Jakob Munck (29-07-2002)
Kommentar
Fra : Jakob Munck


Dato : 29-07-02 20:51

Jeg skal ikke printe ud, men resultatet skal bare vises på skærmen. Jeg
forstår, at der bliver nye muligheder, når man skifter til asp.net, men det
bliver ikke lige med det samme. HTMLEncode synes jeg ikke løser mine
problemer, efter hvad mine eksperimenter viser. Til gengæld er nedenstånde
kode til ind- og udskrivning det bedste jeg har kunnet konstruere. I praksis
virker det næsten perfekt:

Indskrivning:

If Len(kommentar2) < 7 Then
kommentar2 = "Ingen kommentarer !"
else
kommentar2 = replace(kommentar2, vbcrlf, "<br>")
kommentar2 = replace(kommentar2, """", "&#34;", 1, -1, 1)
kommentar2 = replace(replace(kommentar2, """", "&#34;", 1, -1, 1), "'",
"&#39;", 1, -1, 1)
End if

Udskrivning:

<td><textarea cols="25" rows="8" name="kommentar"><%
kommentar2 = RS("kommentar")
kommentar2 = replace(kommentar2, "<br>", vbcrlf)
response.write kommentar2
%></textarea></td>



Tak for hjælpen til jer begge, Jakob og Jørn.

v.h.

Jakob Munck




Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408952
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste