Utilia

Escape og unescape af tekststrenge

Escap eller unescap en tekststreng til JSON, JavaScript, skabelonliteraler, SQL, CSV, HTML-attributter, regulære udtryk og URL'er direkte i din browser.

Sådan escaper eller unescaper du en streng

  1. Vælg målet i Format: JSON-streng, JavaScript-streng, JavaScript-skabelonliteral, SQL-strengliteral, CSV-felt, HTML-attributværdi, regulært udtryk eller URL-komponent.
  2. Skriv eller indsæt din tekst i inputfeltet.
  3. Klik på Escape for at gøre almindelig tekst til en sikker literal, eller på Unescape for at gøre en literal til almindelig tekst igen. Resultatet opdateres, mens du skriver, i den retning, du valgte sidst.
  4. Justér de indstillinger, der vises for formatet: Tilføj omsluttende anførselstegn, Escap tegn uden for ASCII eller Mellemrum som + (formulardata).
  5. Klik på Kopiér, eller på Brug output som input for at vende handlingen om og tjekke, at det går op.

Antallet af tegn før og efter vises under knapperne. Alt kører i din browser; intet uploades.

Hvad hvert format gør

  • JSON-streng: escaper ", \ og kontroltegn (\n, \t, \u0000 …), præcis som JSON.stringify. Med Escap tegn uden for ASCII bliver hvert tegn over U+007E til \uXXXX (emoji bliver til et surrogatpar som 😀). Unescape accepterer teksten med eller uden dens dobbelte anførselstegn og tolererer rå linjeskift.
  • JavaScript-streng (‘…’): escaper omvendt skråstreg, enkelt anførselstegn, linjeskift og kontroltegn samt U+2028 og U+2029, som får ældre motorer til at fejle. Unescape forstår \x41, A, \u{1F600}, ældre oktale escapes som \101 og linjefortsættelser.
  • JavaScript-skabelonliteral (`…`): escaper backticks, omvendte skråstreger og ${, så intet udtryk bliver evalueret; linjeskift og tabulatorer forbliver, som de er, da skabelonliteraler tillader dem.
  • SQL-strengliteral (‘…’): fordobler enkelte anførselstegn (O'Brien → 'O''Brien'), som i standard-SQL. Unescape afviser et anførselstegn, der ikke er fordoblet. Omvendte skråstreger røres ikke: MySQL behandler i standardtilstand også \ som escape-tegn, så tjek din databases regler.
  • CSV-felt (RFC 4180): omslutter feltet med dobbelte anførselstegn og fordobler indre anførselstegn, hvis det indeholder komma, semikolon, tabulator, anførselstegn, linjeskift eller indledende/afsluttende mellemrum. Tilføj omsluttende anførselstegn gennemtvinger anførselstegnene.
  • HTML-attributværdi: erstatter &, <, >, " og ' med entiteter, hvilket er sikkert i både attributter med enkelte og dobbelte anførselstegn. Unescape afkoder numeriske referencer og &amp;, &lt;, &gt;, &quot;, &apos; og &nbsp;.
  • Regulært udtryk (literal tekst): escaper . * + ? ^ $ { } ( ) | [ ] \ / med omvendt skråstreg samt linjeskift og tabulatorer, så mønsteret matcher teksten bogstaveligt. Resultatet er gyldigt med eller uden flaget u.
  • URL-komponent (procentkodning): virker som encodeURIComponent og koder alt undtagen bogstaver, cifre og - _ . ! ~ * ' ( ) som UTF-8-bytes. Mellemrum som + (formulardata) bruger konventionen application/x-www-form-urlencoded.

Escaping er ikke en sikkerhedsgrænse for SQL

Når du vælger SQL, viser værktøjet en påmindelse, og den fortjener at blive gentaget: den rigtige løsning mod SQL-injektion er en parametriseret forespørgsel (prepared statement), hvor værdien sendes adskilt fra SQL-teksten. At escape i hånden er skrøbeligt: det afhænger af databasen, forbindelsens tegnsæt og indstillinger som MySQLs håndtering af omvendt skråstreg. Brug dette output til at læse logfiler, skrive testdata eller fejlsøge en forespørgsel, aldrig til at bygge forespørgsler ud fra brugerinput.

Til CSV advarer værktøjet også, når en værdi begynder med =, +, - eller @: et regneark kan køre den som en formel (CSV-injektion). Anførselstegn forhindrer ikke det; den sædvanlige afhjælpning er at sætte et apostrof eller et mellemrum foran værdien.

Ofte stillede spørgsmål

Hvad er forskellen på en JSON-streng og en JavaScript-streng?

JSON tillader kun dobbelte anførselstegn og et lille sæt escapes (\" \\ \/ \b \f \n \r \t \uXXXX). JavaScript accepterer også enkelte 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 indeholder en omvendt skråstreg efterfulgt af noget, formatet ikke tillader, som \u12 med færre end fire hex-cifre eller en enlig omvendt skråstreg til sidst. Fejlmeddelelsen viser den fejlbehæftede sekvens.

Skal CSV have anførselstegn om hvert felt?

Nej. RFC 4180 kræver kun anførselstegn, når feltet indeholder et komma, et dobbelt anførselstegn eller et linjeskift. Værktøjet sætter også anførselstegn om semikolon, tabulatorer og indledende eller afsluttende mellemrum, fordi mange regneark bruger dem som skilletegn eller fjerner dem.

Er escape af HTML-attributter nok til at forhindre XSS?

Det er korrekt for tekst, der står inde i en attributværdi med anførselstegn. Det er ikke nok for attributter, der selv er kode eller webadresser, som onclick eller href="javascript:…"; de kræver validering, ikke kun escaping.

Bliver min tekst sendt til en server?

Nej. Alle konverteringer kører lokalt i din browser, så du trygt kan indsætte konfigurationsværdier eller data, du ikke vil dele.