---
title: "Förhindra att &quot; skrivs om till \" tecken i ett fält"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/171183-förhindra-att-quot-skrivs-om-till-tecken-i-ett-fält/page2"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "haider"
published: "2008-05-01T07:55:39.000Z"
updated: "2008-05-03T09:21:52.000Z"
replies: 36
views: 2029
page: 2
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/171183-förhindra-att-quot-skrivs-om-till-tecken-i-ett-fält"
---

# Förhindra att &quot; skrivs om till " tecken i ett fält

_Sida 2 av 2._

## #21 — haider, 2008-05-01T14:59Z

Stattin: hehe, nej det funkade inte. Men resultatet var intressant att ta med i kunskapsbagaget.

Vad som hände nu var att den struntade i vad \<!--esparam:artikel:5--\> outputtade för nåt, utan istället så blev innehållet i textrutan just \<!--esparam:artikel:5--\> :)

I och med att vi dödade snuffarna så perl skriptet inte se hela snuff-raden för att skicka den tänkta outputten.
Sammanfattningsvis är att \<!--esparam:artikel:5--\> inte får skrivas om.

Och ja, det kan vara så att perl har en lösning på det. Jag ska ge saken en chans med er hjälp så får vi se vart vi kommer.
Hittar vi en lösning som passar så kör vi på den. Annars gräver jag vidare sen.

edit: jag formulerar om ovantående till "Sammanfattningsvis är att formuleringen \<!--esparam:artikel:5--\> måste lämnas intakt"

Permalänk: https://www.webforum.nu/p/2104428

## #22 — haider, 2008-05-01T15:51Z

Nu var det äntligen slutkastat med tärningen

Sådär gentlemän!

Lösningen är alltså:

```
<script language=JavaScript>
var orig = '<!--esparam:artikel:5-->';
document.write('<input type="text" name="andrafalt5" value="' + orig.replace(/"/g, "&quot;") + '">')
</script>
```

Ärligt talat känns detta som att kasta tärningar eftersom jag ju inte är nån programmerare så hoppas jag på att nåt kasst ska funka.   :r 
Så av nån anlening hjälpte det att köra en **orig.replace(/"/g, "&quot;")** sats, men jag begriper inte hur den får det hela o funka.
Det måste vara att när jag skriver en href-sats i en inputruta så skrivs den om i bakgrunden så att tecknena är kompatibla.
När jag sparar så sparas de rätt.
Så replace-satsen rättar bara när det är fel antagligen, men det blir ju inga fel ändå eftersom databasen inte innehåller några **&quot;**, det har jag kollat efter att ha sparat databasen.

Kan det vara det att jag har nyttjat mig av **var orig = ...**  som felet avlöstes?

Edit: **var orig = ...** är kanske inte hela anledningen, för när jag provade

```
document.write('<input type="text" name="andrafalt5" value="' + orig + '">')
```

så funkade det inte. Med andra ord måste jag ha med replace, men jag förstår inte varför. Det finns ju inget felaktigt att replaca. Eller?

Permalänk: https://www.webforum.nu/p/2104445

## #23 — stattin, 2008-05-01T16:06Z

Problemet är nog att du får snuffar i snuffarna

value = " "" "

prova och vänd på steken då:

```

document.write('<input type=\'text\' name=\'andrafalt5\' value=\'' + orig + '\'>')
```

 

Så kan du ha hur många dubbel snuffar du vill när du sparar utan replace och utan &quot;. Men då blir en enkel snuff problem istället fast då kan man ju replaca dom till dubbelsnuffar.

replace(/'/g, '"')

Eller?

edit/ he.. jag blandar särskrivning med ihopskrivning   :)

Permalänk: https://www.webforum.nu/p/2104449

## #24 — stattin, 2008-05-01T16:11Z

Jag råka citera mig själv   :x

Permalänk: https://www.webforum.nu/p/2104450

## #25 — haider, 2008-05-01T16:19Z

Det var snuffigt värre! Förlåt, men ditt snuffiga inlägg blev smått roligt för mig.

Nu tar jag på mig min allvarliga min igen. ;)
Så du tror det är snuffarna/citatstecknen som ställer till det?
Men varför skulle replace ha hjälpt mig i mitt fungerande fall?

Det är det som jag känner mig osäker över. Händer något i bakgrunden som jag inte kan se, men som replace åtgärdar?

Annars bör jag nog lämna det som det är, även om jag inte har en aning om varför replace löser prolemet, så struntar vi i enkel-snuff metoden för att slippa röra till det.

edit: Nu tror jag att jag börjar fatta.
Vi vill ju att den ska skriva in alla citatstecken och href-taggar mm som de ska vara till databasfilen.
Så här långt vet vi att det alltid har funkat.
När databasen läses och ouputtas till html världen, så kan vi inte tillåta att den skrivs i sitt originalskick, för då blir det krockar i och med citatstecknen. Så vad som tycks ske med replace, är att den vid utskrift snyggar till det hela, som om man i html hade skrivit &quot; vilket en del gör, men när IE ska läsa och rendera ut input-taggen ser allt okej ut.

Första versionen av mitt snickeri krävde att man skrev &quot; i input-rutan och som sen sparades som &quot; i databasfilen men som vid läsningen renderades korrekt. Problemet var senare när man printade ut &quot; i vissa sammanhang så skapades dubbla citatstecken, det vill säga ställen där de inte skulle finnas.

Vad skönt att ha löst det.
Ni ska ha tack alla som var med och hjälpe mig igenom detta.  (y)  (y)  (y)

Permalänk: https://www.webforum.nu/p/2104452

## #26 — stattin, 2008-05-01T16:30Z

Ja det vart lite mycke snuffar   :) 

> **haider skrev:**
>
> även om jag inte har en aning om varför replace löser prolemet, så struntar vi i enkel-snuff metoden för att slippa röra till det.

lek lite med:

```

<script language=JavaScript>
var orig = ' "" ';
alert(orig.replace(/"/g, "&quot;"))
</script>
```

Permalänk: https://www.webforum.nu/p/2104459

## #27 — haider, 2008-05-01T17:14Z

Stattin: såg du min edit i förra posten? Jag tror att jag tolkade orsaken rätt.
Tänkte du nåt särskilt med kodexemplet?

Permalänk: https://www.webforum.nu/p/2104479

## #28 — nitro2k01, 2008-05-01T18:34Z

Nu har du accpeterat ett svar och så, men låt mig komma med ett nytt förslag. Den kod som läser info från text-filen bör ersätta **&** med **&amp;** Varför då? Jo därför att när du skriver **&quot;** i ett value-attribut tolkas det som **"**. (Så måste det vara eftersom det inte skulle gå att sätta ett **"** mitt i ett XHTML-attribut. **\<input value="Detta är ett citat-tecken:" så det så!" /\>** faller inte så väl ut.) Om du alltså ersätter **&** med **&amp;** på serversidan så kommer utskriften bli **&amp;quot;** som kommer tolkas som **&quot;**, och cirkeln är sluten.

Permalänk: https://www.webforum.nu/p/2104510

## #29 — haider, 2008-05-01T19:09Z

Det är helt okej med nya förslag, för finns det utrymme till utveckling så lyssnar jag tacksamt till dessa.

Men jag förstår dessvärre inte riktigt hur du menar.
Jag tolkar det som att &quot; inte kan läsas in pga &-tecknet och därför byts &-tecknet ut mot &amt; som ju också innehåller ett &-tecken! :D
Så det blev lite rörigt för mig.

Menar du alltså att jag inte behöver någon replace-lösning förutsatt att perl outputar "-tecknet som &amp;quot;?

Jag behöver din hjälp för att förstå tankegången, för nu står huvudet helt still. Jag kan till viss nivå förstå javascript, men perl kan jag så gott som inte alls. Så du får förklara för mig om vi pratar javascript eller perl till o börja med. :)

Permalänk: https://www.webforum.nu/p/2104517

## #30 — stattin, 2008-05-01T19:14Z

> **haider skrev:**
>
> Stattin: såg du min edit i förra posten? Jag tror att jag tolkade orsaken rätt.
> Tänkte du nåt särskilt med kodexemplet?

Nä inge spciellt..

Permalänk: https://www.webforum.nu/p/2104518

## #31 — stattin, 2008-05-01T19:38Z

> **nitro2k01 skrev:**
>
> Nu har du accpeterat ett svar och så, men låt mig komma med ett nytt förslag. Den kod som läser info från text-filen bör ersätta **&** med **&amp;**

Menar du att det blir så automatiskt eller att det borde vara så? 

Jag tog och förtydliga min enkelsnuff variant:   :) 

```

<form method="post" onSubmit="return dinFunktion()" action="search.pl">
	<input id="fieldname" type="text" name="fieldname">
</form>

<script>
	function dinFunktion() {
	
		document.getElementById('fieldname').value.replace(/'/g, '"'); //Dubbelsnuff är ok men enkelsnuff byts ut mot en dubbelsnuff.
		return true;
	}

</script>

<script>

var orig = '<!--esparam:artikel:5-->';
document.write('<input type=\'text\' name=\'andrafalt5\' value=\'' + orig + '\'>')

</script>
```

Dubbelsnuff..   :e

Permalänk: https://www.webforum.nu/p/2104521

## #32 — nitro2k01, 2008-05-01T20:02Z

stattin: Inte alls. På server-sidan ska det ske.

haider: Ok, jag försöker en gång till.
Du skriver **3,5&quot; hårddiskar** i rutan.
Det skrivs på serverns till en textfil som **3&quot; hårddiskar**
När du laddar skrivs följande HTML-kod ut: **\<input value="3,5&quot; hårddiskar" /\>**
Värdet i value-attributet tolkas på ett sådant sätt att du får texten **3,5" hårddiskar** i rutan. Så långt är du med antar jag.

Nu menar jag att du ska modda koden på serv-sidan så att den ersätter **&** med **&amp;**. Då skrivs följande HTML ut: **\<input value="3,5&amp;quot; hårddiskar" /\>**
Understrykningen visar den del som gör den relevanta skillnaden. **&amp;** kommer att konverteras till **&**. Pga den manövern tolkas HTML-koden så att följande skrivs ut i rutan:
**3&quot; hårddiskar**
Alltså är cirkeln sluten. Sen är problemet att veta hur du ska göra detta på serversidan.

Permalänk: https://www.webforum.nu/p/2104526

## #33 — stattin, 2008-05-01T20:53Z

Nått åt det här hållet?

```

$string = '3,5" hårddiskar'
$string =~ s/"/&amp;quot;/;
print "$string";
```

eller..

```

$string = '3,5&quot; hårddiskar'
$string =~ s/&/&amp;/;
print "$string";
```

Fast går det med **;** mitt i replacen?

Permalänk: https://www.webforum.nu/p/2104537

## #34 — haider, 2008-05-02T20:38Z

stattin: Jag undrar om man inte hade kunnat köra en enkelsnuff och sen outputta in \<!--esparam:artikel:5--\> as is, det vill säga med dubbelsnuffar och att det funkar utan trixande alls?

Men jag lämnar det som det är, för det funkar.
Jag tolkar det som att det funkar så här:

1\. Jag skriver text i input-rutan, bland annat en massa citatstecken.
2\. Jag sparar ner till en textbaserad databas.

3\. Ett skript läser text från databasen, innehållandes en massa citatstecken.
4\. Skriptet printar ut text där \<!--esparam:artikel:5--\> har stått. Den tar med citatstecken som i vanliga fall krockar med \<input\> taggen då det skapas dubbla citatstecken.
5\. Javascriptet med replace ersätter vid outputten alla citatstecken mot &quote;
6\. Explorer läser in den outputtade texten, renderar &quote; till " inne i input-rutan och det är frid och fröjd.

Nitro:
Jag är med på första stycket.
Men det är andra stycker jag inte är med på. Du förklarar inte varför man behöver skriva om &quote; till &amp;quote;. &quote; tolkas ju redan om som ", eller är det någon annan baktanke du har?

Men jag måste påpeka att jag inte gillar idén att jag behöver skriva &quote; i textrutan. I första utkastet av mitt projekt gjorde jag just så där, men det är bara jobbigt.
Just nu så skriver jag " och det funkar bra. Javascriptet rättar det åt mig mitt i hela processen.

Men varför jag frågar är för att jag är intresserad av att förstå varför du anser att den speciella omskrivningen är nödvändig.

Permalänk: https://www.webforum.nu/p/2104722

## #35 — Troxy, 2008-05-02T21:37Z

> **nitro2k01 skrev:**
>
> \[...\] Jo därför att när du skriver **&quot;** i ett value-attribut tolkas det som **"**. (Så måste det vara eftersom det inte skulle gå att sätta ett **"** mitt i ett XHTML-attribut. **\<input value="Detta är ett citat-tecken:" så det så!" /\>** faller inte så väl ut.)

Precis, så ska det fungera (enligt rekommendation):

> \[...\] User agents should interpret attribute values as follows:
>     \* **Replace character entities with characters,**
>     \* Ignore line feeds,
>     \* Replace each carriage return or tab with a single space.

<http://www.w3.org/TR/html401/types.html#type-cdata>

Permalänk: https://www.webforum.nu/p/2104737

## #36 — Troxy, 2008-05-02T21:50Z

> **haider skrev:**
>
> 5\. Javascriptet med replace ersätter vid outputten alla citatstecken mot &quote;

JavaScriptet är för sent ute, för vid detta tillfälle har "output" redan skett, dvs. servern har levererat HTML till webbläsaren och dina citationstecken har redan orsakat skada. Utför steg #5 på serversidan med Perl istället. Det är bara ovettigt att göra det med JavaScript.

För övrigt finns det fem kontrolltecken i HTML att tänka på:
" (ersätts med &quot;)
' (ersätts med &# 039;)
& (ersätts med &amp;)
\< (ersätts med &lt;)
\> (ersätts med &gt;)

Permalänk: https://www.webforum.nu/p/2104742

## #37 — haider, 2008-05-03T09:21Z

Troxy:

Javascriptet är inte sent ute faktiskt.
Det är sant att servern har levererat outputen med citationstecknen, men skadan är inte skedd eftersom jag ju har löst det så här:

> \<script language=JavaScript\>
> var **orig**   \= '\<!--esparam:artikel:5--\>';
> document.write('\<input type="text" name="andrafalt5" value="' + **orig**.**replace**(/"/g, "&quot;") + '"\>')
> \</script\>

Den outputtade strängen har använts till variabeln **orig**   och senare har jag med **replace**   korrigerat **orig**   och därmed så är resultatet inte skadligt längre.
Så det är väl rätt tänkt eller hur?

Men jag håller givetvis med om att det hela vore mycket bättre att lösa det på serversidan och jag ska låta undersöka det snarast. Jag är inte lika haj på perl (om jag ens kan påstå att jag är ens i närheten av att vara haj på javascript   :r ) så jag ska söka hjälp i den frågan.

Angående kontrolltecknen
Jag känner till den listan. Men Nitros förslag var ju att kombinera två kontrolltecken och det var det jag inte förstod varför man skulle göra så...
Enligt listan så räcker det att skriva om " med &quote;
Men Nitro valde att skriva om &-tecknet i början av &quote; - varför?

Permalänk: https://www.webforum.nu/p/2107671

---

Tråden på webben: https://www.webforum.nu/amne/javascript/171183-förhindra-att-quot-skrivs-om-till-tecken-i-ett-fält/page2  
Föregående sida: https://www.webforum.nu/amne/javascript/171183-förhindra-att-quot-skrivs-om-till-tecken-i-ett-fält.md
