20. august 2005 - 18:08Der er
12 kommentarer og 1 løsning
Hvilke tegn er specialtegn i en string ?
Med et specialtegn mener jeg i denne forbindelse et tegn, som skal behandles på en anden måde end f.eks. bogstaver, når man anbringer det imellem to citationstegn.
Eksempel: Citationstegn ... Hvis jeg i Javascript vil have en string S til at indeholde denne tekst: Manden sagde: "Dav med dig!" - og bukkede. ... så må jeg skrive: S="Manden sagde: \"Dav med dig!\" - og bukkede.";
Jeg har defineret mit tegnsæt vha. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> Jeg ved ikke præcis hvilken indflydelse denne defintion har på de tegn, jeg benytter i mine tekststrenge.
Jeg søger ikke en liste over specialtegn. Jeg søger derimod en lille test, som kan fortælle mig om et tegn er et specialtegn eller ej.
Har forsøgt med dette:
var specialtegn=false; if (escape(ch).length > 1) {specialtegn=true};
Men den metode giver flere specialtegn end nødvendigt.
æøå er ikke special-tegn, ligesom f.eks. ¿ eller $ heller ikke er ...
-- men i nogle kodetabeller er der nogen tegn, som ikke er med, og så kan man forsøge at komme om ved det ved at skrive den escapede oktal-værdi, f.eks. hvis fortolkeren sidder i en engelsk-sproget browser !-)
-- noget andet er, hvis en ting skal bruges som javascript identifier, for så er der rigtig mange spacialtegn, dvs. ugyldige tegn !o]
Okay roenving, jeg stoler foreløbig på at der kun findes 2 relevante specialtegn. Men husk lige, det hele foregår i Javascript.
Hvis min tekststreng f.eks. behandles sådan her: S="<div>Dette er en DIV!</div>" ... så vil HTML-validatoren på www.w3schools.com fortælle, at der er en syntaksfejl, idet en ikke-åben div søges lukket.
Det tyder i mine øjne på, at en korrekt programmeret browser også burde reagere med en fejlmelding. Af den grund har jeg på fornemmelsen, at man nok burde erstatte tegnfølgen </ med <\/ ... - Hilsen Per
-- det er jo html-fortolkeren (her -validatoren !-), som kløjs i det ...
-- et andet klassisk eksempel er det, hvor du vil skrive en masse html-kode til en javascript-variabel, javascript har ingen problemer med html-koden i variablen, men den når aldrig til selvstændigt at fortolke skidtet, fordi html-fortolkeren ikke kan se, at indholdet ligger i en javascript-variabel, og den derfor skal lade være med at parse indholdet ...
Et eksempel (først det, du ikke skal bruge !-)
<script type="text/javascript"> var txt = "Her vil vi godt have en javascript-udskrevet variabel: <script type='text/javascript'>var minTxt = 'Hej';document.write(minTxt);</script>"; document.write(txt); </script>
-- html-fortolkeren vil simpelthen ikke vide, at javascript tekst-variablen er aktiv, og derfor lave en fejl !-)
Hvis du i stedet skriver dette, er det ikke svært at indse, at variablen txt indeholder præcis det samme, men html-fortolkeren kommer ikke indover først:
<script type="text/javascript"> var txt = "Her vil vi godt have en javascript-udskrevet variabel: <scr"; txt += "ipt type='text/javascript'>var minTxt = 'Hej';document.write(minTxt);</scr"; txt += "ipt>"; document.write(txt); </script>
Lige nu arbejder jeg med at oversætte en inputvariabel fra et textarea til en string, som derpå flyttes over i en div. Det viser sig at tegnet \ (backslash) ikke er noget problem. Et citationstegn kan jeg tage højde for ved at ændre til \" (nemlig fordi min tekstvariabel er omklamret af sådanne citationstegn). Men der er problemer med tegnet < ... det fortolkes i visse sammenhænge som starten på et TAG.
Nå, men jeg har vist taget nok af din tid. Jeg er på vej til en løsning. 30 point til dig. - Hilsen Per
Som det indirekte fremgår af mit foregående indlæg, og direkte af dit @19:53:22, er det næppe <-tegnet, men html-lukketags, som kan give problemet:
<script type="text/javascript"> var txt = "Her vil vi godt have en javascript-udskrevet variabel: <script type='text/javascript'>var minTxt = 'Hej';document.write(minTxt);<\/script>"; document.write(txt); </script>
Jeg er ret sikker på, at html-fortolkeren tygger den kode, som står i en html-fil byte for byte (eller dobbelt-byte, hvis mime-typen angiver det !-), så når den finder et lukketag, så reagerer den som om, der står et html-lukketag uanset om det forekommer inde i en javascript-variabel ...
-- i nogle tilfælde giver det ikke mening, hvilket også ses af, at du sjældent har problemer med andre lukketags end </script> i inline scripts, som forekommer i head-sektionen ...
-- jeg mener dog at have oplevet problemer med inline-scripts udenfor head, men kan ik' li'e huske hvor jeg skal kigge, for at finde det !-)
-- og en hurtig test viser, at hvis html-fortolkeren slet ikke er blandet ind i billedet kan du skrive lige hvad det skal være af html-lukketags i en javascript-variabel i et eksternt script !o]
PS. Vi havde her kun fat i inline scipts, så remote scripts var såvidt jeg registrerede ikke på banen ?o]
For de interesserede: Jeg har i samme forbindelse haft et problem med at flytte en indtastet tekststreng fra et textarea til en div et andet sted på skærmen. Der skete sjove ting når tekststrengen indeholdt tegnet "<".
Min løsning er denne: "<" erstattes med "<<q></q>". - Hilsen Per
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.