webForumDet fria alternativet

Förhindra att " skrivs om till " tecken i ett fält

JavaScript

36 svar · 2 024 visningar · startad av haider · sida 2 av 2

Frågan, av haider

Jag har ett perl skript som skriver in fält till en text-fil för att senare läsa in dem i diverse sammanhang. En slags databas så att säga. Väldigt old-fashion antar jag. När jag i ett fält skriver texten "3" hårddiskar" och sparar fältet till databasen (som är i txt-format) så kan jag se att den sparar det som jag skrev det i fältet. Men när perl-skriptet refreshar och läser in informat

Läs frågan i sin helhet →
Medlem sedan jan. 2003956 inlägg
#21

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"

Medlem sedan jan. 2003956 inlägg
#22

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, """) 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 ", 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?

Medlem sedan jan. 2005713 inlägg
#23

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 ". 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 :)

Medlem sedan jan. 2005713 inlägg
#24

Jag råka citera mig själv :x

Medlem sedan jan. 2003956 inlägg
#25

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 " 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 " i input-rutan och som sen sparades som " i databasfilen men som vid läsningen renderades korrekt. Problemet var senare när man printade ut " 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)

Medlem sedan jan. 2005713 inlägg
#26

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>
Medlem sedan jan. 2003956 inlägg
#27

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?

Medlem sedan aug. 20039 340 inlägg
#28

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 & Varför då? Jo därför att när du skriver " 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 & på serversidan så kommer utskriften bli &quot; som kommer tolkas som ", och cirkeln är sluten.

Medlem sedan jan. 2003956 inlägg
#29

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 " 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 &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. :)

Medlem sedan jan. 2005713 inlägg
#30

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..

Medlem sedan jan. 2005713 inlägg
#31

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 &

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

Medlem sedan aug. 20039 340 inlägg
#32

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

haider: Ok, jag försöker en gång till.
Du skriver 3,5" hårddiskar i rutan.
Det skrivs på serverns till en textfil som 3" hårddiskar
När du laddar skrivs följande HTML-kod ut: <input value="3,5" 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 &. Då skrivs följande HTML ut: <input value="3,5&quot; hårddiskar" />
Understrykningen visar den del som gör den relevanta skillnaden. & kommer att konverteras till &. Pga den manövern tolkas HTML-koden så att följande skrivs ut i rutan:
3" hårddiskar
Alltså är cirkeln sluten. Sen är problemet att veta hur du ska göra detta på serversidan.

Medlem sedan jan. 2005713 inlägg
#33

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?

Medlem sedan jan. 2003956 inlägg
#34

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 &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.

Medlem sedan mars 20041 505 inlägg
#35

nitro2k01 skrev:

[...] Jo därför att när du skriver " 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

Medlem sedan mars 20041 505 inlägg
#36

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 ")
' (ersätts med &# 039;)
& (ersätts med &)
< (ersätts med <)
> (ersätts med >)

Medlem sedan jan. 2003956 inlägg
#37

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, """) + '">')
</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?

270 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)