webForumDet fria alternativet

Enkelfnutt i text skapar problem

12 svar · 711 visningar · startad av Bjuris

BjurisMedlem sedan juli 2001514 inlägg
#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?

@ndersMedlem sedan juni 200032 969 inlägg
#2

Du får escapea med backslash.

<%=replace(cityVO.getIdCitycode(), "'", "\'")%>
BjurisMedlem 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?

@ndersMedlem sedan juni 200032 969 inlägg
#4

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

BjurisMedlem 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

@ndersMedlem sedan juni 200032 969 inlägg
#6

hur ser resultatet ut då?

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

BjurisMedlem 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

@ndersMedlem sedan juni 200032 969 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("'", "\\'")%>
BjurisMedlem sedan juli 2001514 inlägg
#9

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

@ndersMedlem sedan juni 200032 969 inlägg
#10

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

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

BjurisMedlem 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("'", "\\\\'")%>

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

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)