|
| 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, """", """, 1, -1, 1)
kommentar2 = replace(replace(kommentar2, """", """, 1, -1, 1), "'",
"'", 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, """", """, 1, -1, 1)
kommentar2 = replace(replace(kommentar2, """", """, 1, -1, 1), "'",
"'", 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
| |
|
|