webForumDet fria alternativet
Logga in / Bli medlem

Enkelfnutt i text skapar problem

JavaScript

12 svar · 713 visningar · startad av Bjuris

Medlem sedan juli 2001514 inlägg
Frågan#1

Jag har en text som kommer från en databas, på varje rad så har jag en "edit knapp" som kopierar in vald data i inputfälten.

Ibland så kan det dock förekomma enkelnuttar i texten typ Int'l och det gör ju så att min sida inte fungerar som den skall.

<a href="#" OnClick="CopyFields('<%=cityVO.getIdCitycode()%>','<%=cityVO.getCityname()%>','<%=cityVO.getCountrycode()%>', '<%=cityVO.getIdTimezone()%>');">edit</a>

Hur skall man lösa det?

Medlem sedan juni 200032 967 inlägg
#2

Du får escapea med backslash.

<%=replace(cityVO.getIdCitycode(), "'", "\'")%>
Medlem sedan juli 2001514 inlägg
#3

men blir inte problemet då att när jag kopierar in texten i inputfälten så får jag med \' istället?

Medlem sedan juni 200032 967 inlägg
#4

Nej, det får du inte. \ är ett escapetecken, och skickas inte vidare någonstans i detta tillfälle.

Medlem sedan juli 2001514 inlägg
#5

Får i varje fall samma scriptfel när jag kört en replace på det.
<%=stationVO.getStationname().replaceAll("'", "\'")%>
ie
om jag kör en replace enl:
<%=stationVO.getStationname().replaceAll("'", "blabla)%>
så får jag inget scriptfel

Medlem sedan juni 200032 967 inlägg
#6

hur ser resultatet ut då?

det som är viktigt är ju hur webbläsaren ser koden.

Medlem sedan juli 2001514 inlägg
#7

Resultat 1:
<a href="#" OnClick="CopyFields('AMA','Amarillo Int'l TX','AMA','true')">edit</a>

Resultat 2:
<a href="#" OnClick="CopyFields('AMA','Amarillo Intblablal TX','AMA','true')">edit</a>

så själva "upptäckten" av tecknet fungerar

Medlem sedan juni 200032 967 inlägg
#8

Öh, vad kör du för språk på serversidan?

Du måste eventuellt escapea din backslash om backslash används som escapetecken i din miljö.

<%=stationVO.getStationname().replaceAll("'", "\\'")%>
Medlem sedan juli 2001514 inlägg
#9

Har testat det, men det fungerr inte.
jag kör Java J2EE, så \ är kanske inte escapesekvensen.

Medlem sedan juni 200032 967 inlägg
#10

Mitt senaste exempel funkar alltså inte?
På vilket sätt funkar det inte?

Medlem sedan juli 2001514 inlägg
#11

ger samma scriptfel och samma resultat
<a href="#" OnClick="CopyFields('AMA','Amarillo Int'l TX','AMA','true')">edit</a>

Medlem sedan juli 2001514 inlägg
#12

Efter att ha testat diverse escapesekvener
\$ , #{ osv så kom jag fram till att denna fungerar på rätt sätt.
<%=stationVO.getStationname().replaceAll("'", "\\\\'")%>

Medlem sedan mars 20034 471 inlägg
#13

Skälet till att du behöver fyra \ i starten, är att ett \ måste överleva TVÅ escapade miljöer. Först körs strängen genom ditt serverscript, som tolkar \\ som \. Sådana har du två av. Den kod som skickas till webbläsaren och JS-tolken är därför '\\'.

Sedan tolkar JS denna sträng och resultatet blir då den \ du från början ville ha in.

(Denna "dubbel-escaping" satte rejäla myror i huvudet på mig för drygt ett år sedan.)

326 ms totalt · 4 externa anrop · v20260731065814-full.0583408b
192 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)