mellemrum (hex 20) bliver til andet tegn (hex c2 a0)

Tags:    javascript html

Jeg har opdaget et kedeligt problem med den syntaxhighlighter jeg bruger på min hjemmeside.

I kan se den her for eksempel : http://scootergrisen.dk/htmlgrisen/kode_form_tag.php

Når man dobbeltklikker i kodeboksen laves en textareaboks uden på hvor alt teksten markes så den er let at kopier.

Det virker også fint nok men i Opera og Safari og Chrome hvis linien starter med 3 mellemrum for eksempel så når man kopier det i de browsere så i stedet for at det er en mellemrums tegn (hex 20) så bliver det til et tegn som har hex værdien c2 a0. Hvilket i min teksteditor ligner et mellemrumstegn men det er det ikke og giver så stor forvirring når man skal prøve min kode fra hjemmesiden fordi så giver det valideringsfejl og alt mulig.

Jeg tror fejlen sker på denne linie kode :
Fold kodeboks ind/udJScript kode 

Er der nogen der har en løsning ?



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
&#160 er et såkaldt "non-breaking space". http://en.wikipedia.org/wiki/Non-breaking_space

Fejlen sker ikke i den linje du henviser til, men enten et sted i din kode, din submit form eller i dit highlightnings bibliotek.

Den nemmeste løsning er vel bare en:
Fold kodeboks ind/udJScript kode 


Hvor du altså erstatter alle nbsp; med normale mellemrum.




Ok tak jeg prøver og rode mere med koden og ser om jeg kan finde ud af hvor det tegn kommer fra.



Det er åbenbart et kendt problem, med den syntax highlighter du bruger. Der er oprettet en ticket på problemet her: https://bitbucket.org/alexg/syntaxhighlighter/issue/174/double-click-and-copy-spaces-copied-as-c2

En mulig løsning der bliver foreslået, er at sætte:

Fold kodeboks ind/udJScript kode 


Men det er vist ikke alle der får løst problemet af dette 'fix'...



Ok tak.
Det noget øv det projekt ikke bliver vedligeholdt mere.
Jeg tror ikke det virker med ' ', altså et mellemrums tegn fordi lad os sige jeg indrykker en linie så vises det ikke rigtigt med 3 mellemrumstegn da det virker som 1 mellemrum når teksten vises i en div for eksempel.

Det er først når man dobbeltklikker at teksten bliver indsat i en textarea hvor man så godt kunne.

Men jeg har brugt str = str.replace(/\u00a0/g, ' '); og det virker fint selvom det jo ville være bedre ikke at skulle det.

Men hvordan kan det være at tegnet hedder 00a0 når der i hex editor står c2a0 ?



\u00a0 hentyder til at non-breaking space er unicodekarakter nummer 160. Dette tal har i princippet intet at gøre med hvordan man repræsenterer karakteren i en computer. Det er først når man vælger at encode karakteren i utf-8 at den bliver til de to bytes 0xc2a0. Havde man encoded i utf-16 i stedet, var karakteren blevet til de to bytes 0x00a0.

Den lidt unaturlige utf-8 encoding tror jeg har noget at gøre med, at utf-8 encoder nogle karakterer som én byte og andre som to bytes.



t