webForumDet fria alternativet

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

JavaScript

36 svar · 2 024 visningar · startad av haider

Medlem sedan jan. 2003956 inlägg
Frågan#1

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 informationen från textfilen står det numera 3,5" hårddiskar i fältet. Det är okej egentligen, för vad den gör är att den troligen omvandlar " till " men så snart jag sparar så sparas "-tecknet istället för " till textfilen och då blir det problem.

Så jag undrar om javascript kan göra om "-tecknet till " i bakgrunden, så att vare sig jag skriver ett "-tecken manuellt eller att det redan står där när jag sparar, så sparas det som " i textfilen.

Förtydligande: Varför jag över huvudtaget behöver spara om något är att det givetvis finns fler vält i en databasrad förutom det fält där jag behöver skriva "-tecken.
De andra fälten kan jag behöve spara rätt ofta och det är bara jobbigt att behöva gå in och ändra " till " för jämnan.

Medlem sedan nov. 20014 054 inlägg
#2

Javascript:

stringObject.replace('"','"');

Kanske, kan funka.. :)

Medlem sedan jan. 2003956 inlägg
#3

tjena fredde, tackar!

hur hade du tänkt att den används? Varje gång man trycker en knapp eller vid submit?

Medlem sedan nov. 20014 054 inlägg
#4

Förmodligen vore väl kanske enklast att använda vid submit. Du kan ju iofs testa först, för att se så att det funkar.

Medlem sedan jan. 2003956 inlägg
#5

Okej.

Först skulle jag testa och då skrev jag nåt jätteenkelt, men tydligen skrev jag fel för det funkar inte:

<script>
	function testFN() {
	
		var oldtext = document.textfield.value;
		var newtext = oldtext.replace(/\"/, "&quot;");
		
		document.textfield.value = newtext;
		window.alert(oldtext);
	}
</script>

<input type="text" name="textfield" onchange="testFN()" />

Enligt den här sidan så skriver man replace som jag gjorde ovan, det vill säga replace(/from something/, "to something") och då kör man inte med citatstecken på första strängen.
\" ska man väl skriva när man vill klämma in ett citatstecken mitt i javascript eller hur?

Felet jag gör tycks vara document.textfield.value - hur ska man skriva?

tillägg:
Strunt i länken ovan, för det går alldeles utmärkt att skriva '"'. Jag skrev detta med gott resultat:

<script type="text/javascript">var str="En 3,5\" h&aring;rddisk";

document.write(str.replace('"', "&quot;"));</script>

Så nu måste jag bara fatta hur man kan utläsa value ur en input-tagg.

Medlem sedan jan. 2005713 inlägg
#6

Du måste ange ett namn på formen också.


<form name="minform">

document.minform.textfield.value

sen finns det säkert minst tre sätt till att göra det på som säkert någon kommer att visa dig. :)

Medlem sedan nov. 20014 054 inlägg
#7

eller om man bara har en form på sidan:

document.forms[0].fieldname.value

:)

Medlem sedan jan. 2003956 inlägg
#8

Jag ville fråga om man måste ha form, för alla tutorials visar exempel med form, men jag lät bli för att slippa få svaret ja :) och i hopp om att få ett andra alternativ. Men det tycks vara så att form krävs.

Ska testa det snart.

edit: tack Fredde, ska ta med ditt tips i beaktning

Medlem sedan nov. 20014 054 inlägg
#9

Jo du kan ju använda dig av andra metoder, om varje inputfält har ett specifikt id, så kan man ju använda:

document.getElementById('id');

Eller gå via tag-namnet

document.getElementsByTagName('input')

Då får man en array med alla "input" element. Där första inputfältet i array är:

document.getElementsByTagName('input')[0];

Alla vägar bär till Rom. :P

Dock är en del mer eller mindre långsökta vägar. :)

Medlem sedan aug. 20039 340 inlägg
#10

När du kör med en regexp med två / behöver du inte escape:a citat-tecknet. Däremot rekommenderar jag dig att ändra regexpen till /"/g vilket gör att alla förekomster av " matchas, inte bara den första.

Medlem sedan jan. 2003956 inlägg
#11

Fredde: Jag tror att den mest lämpliga är document.getElementById('id'); då det är lätt att bara tilldela ett ID åt den textruta som jag ska köra lösningen på.

Nu funkar det för övrigt, jag behöver bara komma på hur jag ska lösa subtmit-grejen.
Formuläret är uppbyggt så här:

<form method="post" action="search.pl">

Så på nåt sätt måste jag köra både scriptet vid submission (alternativt vid onChange eller vad tycker du?) samt action:et som nämns ovan.

Nitro: Kan man skriva /"/ eller måste det vara /\"/, det vill säga att "-tecknet måste skrivas om till \" ?

Medlem sedan jan. 2005713 inlägg
#12

onSubmit?


<form method="post" onSubmit="return dinFunktion()" action="search.pl">

<script>

function dinFunktion() {

 alert(Så här?')
 return true;

}

</script>

Problemet med att validera i js är att man kan stänga av javascript i webbläsaren och på så sätt komma runt det hela. Kan ju ställa till en hel del.

Medlem sedan aug. 20039 340 inlägg
#13

Så här: escape behövs för att infoga tecken som annars hade tolkats som kontrolltecken. I en vanlig sträng måste du alltså skriva \" för att infoga ett " eller \\ fö att infoga \. Däremot behöver du inte skriva \/ eller \* i en vanlig sträng.
Däremot i en regexp skriven med /-notation så är inte " ett kontrolltecken och kan skrivas utan escape. Däremot så måste du escape / och * som annars skulle betyda "Regexpen slutar här" (På samma sätt som " hade betytt strängen slutar här i en sträng) respektive "Matcha samma tecken 0, 1 eller flera gånger."

Medlem sedan nov. 20014 054 inlägg
#14

Bara en liten fundering, varför löser du inte detta via perl iställe? :)

Medlem sedan jan. 2003956 inlägg
#15

Statting: awesome! Stort tack.
Vad gäller att användaren stänger av javascript så undrar jag dels om folk gör det och isåfall hur stor andel. Sen kan jag tillägga att hela sidan troligen kommer att vara totalt handikappat när man stänger av javascript att just den här enstaka grejen inte kommer att fungera är nog "inte hela världen".
Användaren lär upptäcka att sidan kräver javascript :)

Nitro: Vänta nu, har jag förstått dig rätt? Uppe skrev du /"/g. Är det felstavat eller ska g:et finnas med? Om g:et var en felstavning så betyder det att du rekommenderar /"/ utan att man escapar citatstecknet, inte sant?

Hur som helst så verkar det som om lösningen kan vara meningslös eftersom den måste tillämpas omvänt.

Just nu har vi lyckats spara om " till " vilket jag trodde var vad som behövdes.
Det ledde till att perl-skriptet outputtade något som såg ut så här:

<a href=&quot;/kategori/index.html&quot;>

Det blev helt knasigt.

När jag bad den att spara " tecknet till txt-filen så gick det bra vid outputten, då blev sökvägen korrekt:

<a href="/kategori/index.html">

Det som blev fel (och som är upphovet till tråden) var i admin-sidan där jag alltså anger sökvägen i textrutan.
Problemet sker av följande skäl.
Input taggen ser ut så här:

<input type="text" name="andrafalt5" value="<!--esparam:artikel:5-->">

<!--esparam:artikel:5--> läses in med hjälp av perl skriptet från textfilen och den inehåller en rad som ser ut så:

Kategori > <a href="/kategori/index.html">Väskor</a>

Var för sig fungerar de två raderna.
Men tillsammans får jag följande output.

<input type="text" name="andrafalt5" value="Kategori > <a href="/kategori/index.html">Väskor</a>">

Det är då som input-taggen bryts.
Jag trodde att lösningen var att konvertera om citatstecknen till " skulle lösa fallet.
Det gjorde det ju delvis; Den bröt inte inputtaggen, men outputen var värdelös som jag skrev uppe.

Den lösning jag kommer på är att jag med javascript kör en print-funktion som printar ut input-taggen enligt nedanstående för att slippa citatteckensproblemet. Typ nåt sånt:

<script language=JavaScript>document.write("<input type=\"text\" name=\"andrafalt5\" value=\"<!--esparam:artikel:5-->\">")</script>

Ska testa nu.
Men om någon har något förslag vill jag gärna höra det, för jag vet att all kod jag lyckas få ur mig är fulhacks :bire

Medlem sedan jan. 2003956 inlägg
#16

Fredde: Såg just ditt svar.
Jag är egentligen ingen programmerare och jag har tools som jag använder mig av. Ett av toolsen var i perl. Jag är osäker på om det ens går att lösa det på perl-nivå, men om du tittar på ovanstående problemställning så klarnar det om varför problemet finns.

Medlem sedan aug. 20039 340 inlägg
#17

haider skrev:

Nitro: Vänta nu, har jag förstått dig rätt? Uppe skrev du /"/g. Är det felstavat eller ska g:et finnas med? Om g:et var en felstavning så betyder det att du rekommenderar /"/ utan att man escapar citatstecknet, inte sant?

Prexisum cisum lupidus correctum. " utan escape. Och g står för global som betyder att regexpen får tillåtelse att matcha flera gånger.

Medlem sedan jan. 2003956 inlägg
#18

Nitro: Aha, det var nya grejer för mig. Det värsta med att inte kunna saker är att man inte ser skillnad mellan en felstavning och något som ska vara där. Ja, man är lite pinsam mitt bland er duktiga programmerare :D

Medlem sedan jan. 2005713 inlägg
#19

Hmm? men är det inte taggarna som ställer till det då?

Börja med att ändra till enkel snuffar så slipper du escapa.


<script language=JavaScript>document.write([B]'[/B]<input type="text" name="andrafalt5" value="<!--esparam:artikel:5-->">[B]'[/B])</script>

Kör sedan replace på alla snuffar så det blir enkelsnuffar och replaca taggarna < = < > = > , är jag fel ute om jag tänker så.

så borde det ju se ut så här:


<input type="text" name="andrafalt5" value="Kategori &gt; &lt;a href='/kategori/index.html'&gt;Väskor&lt;/a&gt;" />

eller nått :OO

Sen tror jag perl har en fiffig lösning på det hela men jag är inte insatt i perl.

Medlem sedan jan. 2003956 inlägg
#20

Stattin: Ska titta på ditt förslag med.

Här är meddelandet jag skrev precis och det var innan jag tog dina förslag med i beräkningen. I'll be back som sagt :)
----------
Okej, jag måste fastställa att javascriptlösningen inte skilde sig i resultat från hur det var.

Jag har en känsla av att man kan lämna allt som det är förutom när det kommer till <!--esparam:artikel:5--> grejen. Eftersom den innehåller citatstecken och andra tecken som kan krocka så måste den på nåt sätt skrivas om vid inläsning och vid inläsning endast. När man sparar ska den sparas utan krumelurara som kommer till vid omskrivning. Frågan är hur.

När jag i Dreamweaver skriver in texten:

Tillbehör > <a href="/bags/index.html">Väskor</a>

i en text-ruta så skrivs den om (är inte säker om det är Dreamweaver som skriver om den eller om det är obligatoriskt) till:

Tillbehör &gt; &lt;a href=&quot;/bags/index.html&quot;&gt;Väskor&lt;/a&gt;

Kanske är detta lösningen? I så fall undrar jag hur omskrivningen sker och hur man kan göra en sådan omskrivning genom javascript.

Eller vänta nu.. (det här inlägget känns mer som en monolog, så jag ber om överseende :r )
Jag ska testa replace-lösningen vid inläsningen! I'll be back! :h

258 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)