Utilia

Escape og unescape av strenger

Escape eller unescape en streng for JSON, JavaScript, malliteraler, SQL, CSV, HTML-attributter, regulære uttrykk og URL-er, direkte i nettleseren din.

Slik escaper eller unescaper du en streng

  1. Velg målet i Format: JSON-streng, JavaScript-streng, JavaScript-malliteral, SQL-strengliteral, CSV-felt, HTML-attributtverdi, regulært uttrykk eller URL-komponent.
  2. Skriv eller lim inn teksten din i inndataboksen.
  3. Klikk Escape for å gjøre vanlig tekst om til en trygg literal, eller Unescape for å gjøre en literal om til vanlig tekst igjen. Resultatet oppdateres mens du skriver, i den retningen du sist valgte.
  4. Juster valgene som vises for formatet: Legg til omsluttende anførselstegn, Escape tegn utenfor ASCII eller Mellomrom som + (skjemadata).
  5. Klikk Kopier, eller Bruk utdata som inndata for å snu operasjonen og sjekke at den går begge veier.

Antall tegn før og etter vises under knappene. Alt kjører i nettleseren din, og ingenting lastes opp.

Hva hvert format gjør

  • JSON-streng: escaper ", \ og kontrolltegn (\n, \t, \u0000 …), akkurat som JSON.stringify. Med Escape tegn utenfor ASCII blir hvert tegn over U+007E til \uXXXX (emoji blir et surrogatpar som 😀). Unescape godtar teksten med eller uten doble anførselstegn, og tåler rå linjeskift.
  • JavaScript-streng (‘…’): escaper omvendt skråstrek, enkelt anførselstegn, linjeskift og kontrolltegn, pluss U+2028 og U+2029, som ødelegger eldre motorer. Unescape forstår \x41, A, \u{1F600}, eldre oktale escape-sekvenser som \101 og linjefortsettelser.
  • JavaScript-malliteral (`…`): escaper backticks, omvendte skråstreker og ${, slik at ingen uttrykk evalueres. Linjeskift og tabulatorer blir som de er, siden malliteraler tillater dem.
  • SQL-strengliteral (‘…’): dobler enkle anførselstegn (O'Brien → 'O''Brien'), som i standard-SQL. Unescape avviser et anførselstegn som ikke er doblet. Omvendte skråstreker røres ikke: MySQL i standardmodus behandler også \ som escape-tegn, så sjekk reglene for databasen din.
  • CSV-felt (RFC 4180): omslutter feltet med doble anførselstegn og dobler anførselstegn inni når det inneholder komma, semikolon, tabulator, anførselstegn, linjeskift eller innledende/avsluttende mellomrom. Legg til omsluttende anførselstegn tvinger fram anførselstegnene.
  • HTML-attributtverdi: erstatter &, <, >, " og ' med entiteter, noe som er trygt i attributter både med enkle og doble anførselstegn. Unescape dekoder numeriske referanser og &amp;, &lt;, &gt;, &quot;, &apos; og &nbsp;.
  • Regulært uttrykk (bokstavelig tekst): escaper . * + ? ^ $ { } ( ) | [ ] \ / med omvendt skråstrek, samt linjeskift og tabulatorer, slik at mønsteret treffer teksten bokstavelig. Resultatet er gyldig med eller uten u-flagget.
  • URL-komponent (prosentkoding): fungerer som encodeURIComponent og koder alt unntatt bokstaver, sifre og - _ . ! ~ * ' ( ) som UTF-8-byte. Mellomrom som + (skjemadata) bruker konvensjonen for application/x-www-form-urlencoded.

Escaping er ingen sikkerhetsgrense for SQL

Når du velger SQL, viser verktøyet en påminnelse, og den tåler å gjentas: den egentlige løsningen mot SQL-injeksjon er en parametrisert spørring (prepared statement), der verdien sendes atskilt fra SQL-teksten. Å escape for hånd er skjørt: det avhenger av databasen, tegnsettet i tilkoblingen og innstillinger som MySQLs håndtering av omvendt skråstrek. Bruk denne utdataen til å lese logger, skrive testdata eller feilsøke en spørring, aldri til å bygge spørringer av brukerinndata.

For CSV advarer verktøyet også når en verdi begynner med =, +, - eller @: et regneark kan kjøre den som en formel (CSV-injeksjon). Anførselstegn forhindrer ikke det. Det vanlige tiltaket er å sette et apostrof eller et mellomrom foran verdien.

Ofte stilte spørsmål

Hva er forskjellen på en JSON-streng og en JavaScript-streng?

JSON tillater bare doble anførselstegn og et lite utvalg escape-sekvenser (\" \\ \/ \b \f \n \r \t \uXXXX). JavaScript godtar også enkle anførselstegn, backticks, \x41, \u{…}, \v og \0. Gyldige JSON-escapes er gyldige i JavaScript, men ikke omvendt.

Hvorfor mislykkes unescape med «ugyldig escape-sekvens»?

Teksten inneholder en omvendt skråstrek etterfulgt av noe formatet ikke tillater, for eksempel \u12 med færre enn fire heksadesimale sifre, eller en enslig omvendt skråstrek på slutten. Feilmeldingen viser den feilaktige sekvensen.

Trenger CSV anførselstegn rundt hvert felt?

Nei. RFC 4180 krever bare anførselstegn når feltet inneholder komma, et dobbelt anførselstegn eller et linjeskift. Dette verktøyet siterer også semikolon, tabulatorer og innledende eller avsluttende mellomrom, fordi mange regneark bruker dem som skilletegn eller fjerner dem.

Er HTML-attributt-escape nok til å hindre XSS?

Det er riktig for tekst som står inni en sitert attributtverdi. Det er ikke nok for attributter som selv er kode eller URL-er, som onclick eller href="javascript:…". De trenger validering, ikke bare escaping.

Blir teksten min sendt til en server?

Nei. Alle konverteringer kjører lokalt i nettleseren din, så du kan trygt lime inn konfigurasjonsverdier eller data du ikke ville delt.