Utilia

Escape και unescape συμβολοσειρών

Κάντε escape ή unescape σε συμβολοσειρές για JSON, JavaScript, SQL, CSV, χαρακτηριστικά HTML, κανονικές εκφράσεις και URL, στο πρόγραμμα περιήγησής σας.

Πώς να κάνετε escape ή unescape σε μια συμβολοσειρά

  1. Διαλέξτε τον στόχο στο πεδίο Μορφή: Συμβολοσειρά JSON, Συμβολοσειρά JavaScript, Template literal JavaScript, Λεκτικό συμβολοσειράς SQL, Πεδίο CSV, Τιμή χαρακτηριστικού HTML, Κανονική έκφραση ή Στοιχείο URL.
  2. Πληκτρολογήστε ή επικολλήστε το κείμενό σας στο πλαίσιο εισόδου.
  3. Πατήστε Escape για να μετατρέψετε απλό κείμενο σε ασφαλές κυριολεκτικό ή Unescape για να μετατρέψετε ένα κυριολεκτικό ξανά σε απλό κείμενο. Το αποτέλεσμα ενημερώνεται καθώς πληκτρολογείτε, προς την κατεύθυνση που επιλέξατε τελευταία.
  4. Προσαρμόστε τις επιλογές που εμφανίζονται για τη μορφή: Προσθήκη εισαγωγικών γύρω από το κείμενο, Escape χαρακτήρων εκτός ASCII ή Κενά ως + (δεδομένα φόρμας).
  5. Πατήστε Αντιγραφή ή Χρήση του αποτελέσματος ως εισόδου για να αντιστρέψετε τη διαδικασία και να ελέγξετε την αναστροφή.

Ο αριθμός των χαρακτήρων πριν και μετά εμφανίζεται κάτω από τα κουμπιά. Όλα εκτελούνται στο πρόγραμμα περιήγησής σας και τίποτα δεν μεταφορτώνεται.

Τι κάνει κάθε μορφή

  • Συμβολοσειρά JSON: κάνει escape στα ", \ και στους χαρακτήρες ελέγχου (\n, \t, \u0000…), ακριβώς όπως η JSON.stringify. Με την επιλογή Escape χαρακτήρων εκτός ASCII, κάθε χαρακτήρας πάνω από το U+007E γίνεται \uXXXX (τα emoji γίνονται ζεύγος surrogate, όπως 😀). Το unescape δέχεται το κείμενο με ή χωρίς τα διπλά εισαγωγικά και ανέχεται ωμές αλλαγές γραμμής.
  • Συμβολοσειρά JavaScript (‘…’): κάνει escape στην ανάστροφη κάθετο, στο μονό εισαγωγικό, στις αλλαγές γραμμής και στους χαρακτήρες ελέγχου, καθώς και στα U+2028 και U+2029 που χαλούν παλαιότερες μηχανές. Το unescape κατανοεί τα \x41, A, \u{1F600}, τα παλαιά οκταδικά escape όπως το \101 και τις συνέχειες γραμμής.
  • Template literal JavaScript (`…`): κάνει escape στους ανάποδους τόνους, στις ανάστροφες καθέτους και στο ${, ώστε να μην υπολογίζεται καμία έκφραση. Οι αλλαγές γραμμής και τα tab μένουν ως έχουν, αφού τα template literals τα επιτρέπουν.
  • Λεκτικό συμβολοσειράς SQL (‘…’): διπλασιάζει τα μονά εισαγωγικά (O'Brien → 'O''Brien'), όπως στην τυπική SQL. Το unescape αρνείται ένα εισαγωγικό που δεν είναι διπλασιασμένο. Οι ανάστροφες κάθετοι μένουν ανέγγιχτες: η MySQL στην προεπιλεγμένη λειτουργία τη χειρίζεται επίσης ως χαρακτήρα escape, γι’ αυτό ελέγξτε τους κανόνες της βάσης σας.
  • Πεδίο CSV (RFC 4180): περικλείει το πεδίο σε διπλά εισαγωγικά και διπλασιάζει τα εσωτερικά εισαγωγικά όταν περιέχει κόμμα, ερωτηματικό, tab, εισαγωγικό, αλλαγή γραμμής ή αρχικό/τελικό κενό. Η επιλογή Προσθήκη εισαγωγικών γύρω από το κείμενο επιβάλλει τα εισαγωγικά.
  • Τιμή χαρακτηριστικού HTML: αντικαθιστά τα &, <, >, " και ' με οντότητες, κάτι που είναι ασφαλές τόσο σε χαρακτηριστικά με μονά όσο και με διπλά εισαγωγικά. Το unescape αποκωδικοποιεί τις αριθμητικές αναφορές και τα &amp;, &lt;, &gt;, &quot;, &apos; και &nbsp;.
  • Κανονική έκφραση (κυριολεκτικό κείμενο): προσθέτει ανάστροφη κάθετο στα . * + ? ^ $ { } ( ) | [ ] \ /, καθώς και στις αλλαγές γραμμής και τα tab, ώστε το μοτίβο να ταιριάζει κυριολεκτικά με το κείμενο. Το αποτέλεσμα είναι έγκυρο με ή χωρίς τη σημαία u.
  • Στοιχείο URL (κωδικοποίηση ποσοστού): λειτουργεί όπως η encodeURIComponent, κωδικοποιώντας ως byte UTF-8 ό,τι δεν είναι γράμμα, ψηφίο ή ένα από τα - _ . ! ~ * ' ( ). Η επιλογή Κενά ως + (δεδομένα φόρμας) ακολουθεί τη σύμβαση application/x-www-form-urlencoded.

Το escape δεν είναι όριο ασφάλειας για την SQL

Όταν επιλέγετε SQL, το εργαλείο εμφανίζει μια υπενθύμιση που αξίζει να επαναληφθεί: η πραγματική λύση απέναντι στο SQL injection είναι το ερώτημα με παραμέτρους (prepared statement), όπου η τιμή στέλνεται χωριστά από το κείμενο SQL. Το χειροκίνητο escape είναι εύθραυστο: εξαρτάται από τη βάση δεδομένων, το σύνολο χαρακτήρων της σύνδεσης και ρυθμίσεις όπως ο χειρισμός της ανάστροφης καθέτου στη MySQL. Χρησιμοποιήστε το αποτέλεσμα για να διαβάσετε αρχεία καταγραφής, να γράψετε δεδομένα δοκιμών ή να διορθώσετε ένα ερώτημα, ποτέ για να φτιάξετε ερωτήματα από δεδομένα χρήστη.

Στο CSV, το εργαλείο προειδοποιεί επίσης όταν μια τιμή ξεκινά με =, +, - ή @: ένα υπολογιστικό φύλλο μπορεί να την εκτελέσει ως τύπο (CSV injection). Τα εισαγωγικά δεν το αποτρέπουν· η συνήθης αντιμετώπιση είναι να προτάξετε στην τιμή ένα απόστροφο ή ένα κενό.

Συχνές ερωτήσεις

Ποια είναι η διαφορά ανάμεσα σε μια συμβολοσειρά JSON και μια συμβολοσειρά JavaScript;

Το JSON επιτρέπει μόνο διπλά εισαγωγικά και ένα μικρό σύνολο escape (\" \\ \/ \b \f \n \r \t \uXXXX). Η JavaScript δέχεται επίσης μονά εισαγωγικά, ανάποδους τόνους, \x41, \u{…}, \v και \0. Τα έγκυρα escape του JSON είναι έγκυρα στη JavaScript, αλλά όχι το αντίστροφο.

Γιατί το unescape αποτυγχάνει με «μη έγκυρη ακολουθία escape»;

Το κείμενο περιέχει μια ανάστροφη κάθετο ακολουθούμενη από κάτι που η μορφή δεν επιτρέπει, όπως το \u12 με λιγότερα από τέσσερα δεκαεξαδικά ψηφία, ή μια τελική μεμονωμένη ανάστροφη κάθετο. Το μήνυμα σφάλματος δείχνει την προβληματική ακολουθία.

Χρειάζεται το CSV εισαγωγικά σε κάθε πεδίο;

Όχι. Το RFC 4180 απαιτεί εισαγωγικά μόνο όταν το πεδίο περιέχει κόμμα, διπλό εισαγωγικό ή αλλαγή γραμμής. Το εργαλείο βάζει εισαγωγικά και σε ερωτηματικά, tab και αρχικά ή τελικά κενά, επειδή πολλά υπολογιστικά φύλλα τα χρησιμοποιούν ως διαχωριστικά ή τα αφαιρούν.

Αρκεί το escape χαρακτηριστικού HTML για να αποτραπεί το XSS;

Είναι σωστό για κείμενο που μπαίνει μέσα σε τιμή χαρακτηριστικού με εισαγωγικά. Δεν αρκεί για χαρακτηριστικά που είναι από μόνα τους κώδικας ή URL, όπως τα onclick ή href="javascript:…"· αυτά χρειάζονται επικύρωση, όχι μόνο escape.

Στέλνεται το κείμενό μου σε διακομιστή;

Όχι. Όλες οι μετατροπές γίνονται τοπικά στο πρόγραμμα περιήγησής σας, επομένως μπορείτε να επικολλήσετε με ασφάλεια τιμές ρυθμίσεων ή δεδομένα που δεν θα θέλατε να μοιραστείτε.