sfcode
An Online Competing and Development Environment
|
Given some data, jsesc returns a stringified representation of that data. jsesc is similar to JSON.stringify()
except:
For any input, jsesc generates the shortest possible valid printable-ASCII-only output. Here’s an online demo.
jsesc’s output can be used instead of JSON.stringify
’s to avoid mojibake and other encoding issues, or even to avoid errors when passing JSON-formatted data (which may contain U+2028 LINE SEPARATOR, U+2029 PARAGRAPH SEPARATOR, or lone surrogates) to a JavaScript parser or an UTF-8 encoder.
Via npm:
In Node.js:
This function takes a value and returns an escaped version of the value where any characters that are not printable ASCII symbols are escaped using the shortest possible (but valid) escape sequences for use in JavaScript strings. The first supported value type is strings:
Instead of a string, the value
can also be an array, an object, a map, a set, or a buffer. In such cases, jsesc
returns a stringified version of the value where any characters that are not printable ASCII symbols are escaped in the same way.
The optional options
argument accepts an object with the following options:
The default value for the quotes
option is ‘'single’. This means that any occurrences of
'in the input string are escaped as
\'`, so that the output can be used in a string literal wrapped in single quotes.
If you want to use the output as part of a string literal wrapped in double quotes, set the quotes
option to ‘'double’`.
If you want to use the output as part of a template literal (i.e. wrapped in backticks), set the quotes
option to ‘'backtick’`.
This setting also affects the output for arrays and objects:
The default value for the numbers
option is ‘'decimal’. This means that any numeric values are represented using decimal integer literals. Other valid options are
binary,
octal, and
hexadecimal`, which result in binary integer literals, octal integer literals, and hexadecimal integer literals, respectively.
The wrap
option takes a boolean value (true
or false
), and defaults to false
(disabled). When enabled, the output is a valid JavaScript string literal wrapped in quotes. The type of quotes can be specified through the quotes
setting.
The es6
option takes a boolean value (true
or false
), and defaults to false
(disabled). When enabled, any astral Unicode symbols in the input are escaped using ECMAScript 6 Unicode code point escape sequences instead of using separate escape sequences for each surrogate half. If backwards compatibility with ES5 environments is a concern, don’t enable this setting. If the json
setting is enabled, the value for the es6
setting is ignored (as if it was false
).
The escapeEverything
option takes a boolean value (true
or false
), and defaults to false
(disabled). When enabled, all the symbols in the output are escaped — even printable ASCII symbols.
This setting also affects the output for string literals within arrays and objects.
The minimal
option takes a boolean value (true
or false
), and defaults to false
(disabled). When enabled, only a limited set of symbols in the output are escaped:
\0
\b
\t
\n
\f
\r
\\
\u2028
\u2029
quotes
option)Note: with this option enabled, jsesc output is no longer guaranteed to be ASCII-safe.
The isScriptContext
option takes a boolean value (true
or false
), and defaults to false
(disabled). When enabled, occurrences of </script
and </style
in the output are escaped as <\/script
and <\/style
, and <!--
is escaped as \x3C!--
(or \u003C!--
when the json
option is enabled). This setting is useful when jsesc’s output ends up as part of a <script>
or <style>
element in an HTML document.
The compact
option takes a boolean value (true
or false
), and defaults to true
(enabled). When enabled, the output for arrays and objects is as compact as possible; it’s not formatted nicely.
This setting has no effect on the output for strings.
The indent
option takes a string value, and defaults to ‘’\t'. When the
compactsetting is enabled (
true), the value of the
indent` option is used to format the output for arrays and objects.
This setting has no effect on the output for strings.
The indentLevel
option takes a numeric value, and defaults to 0
. It represents the current indentation level, i.e. the number of times the value of the indent
option is repeated.
The json
option takes a boolean value (true
or false
), and defaults to false
(disabled). When enabled, the output is valid JSON. Hexadecimal character escape sequences and the \v
or \0
escape sequences are not used. Setting json: true
implies ‘quotes: 'double’, wrap: true, es6: false`, although these values can still be overridden if needed — but in such cases, the output won’t be valid JSON anymore.
Note: Using this option on objects or arrays that contain non-string values relies on JSON.stringify()
. For legacy environments like IE ≤ 7, use a JSON
polyfill.
The lowercaseHex
option takes a boolean value (true
or false
), and defaults to false
(disabled). When enabled, any alphabetical hexadecimal digits in escape sequences as well as any hexadecimal integer literals (see the numbers
option) in the output are in lowercase.
A string representing the semantic version number.
To use the jsesc
binary in your shell, simply install jsesc globally using npm:
After that you’re able to escape strings from the command line:
To escape arrays or objects containing string values, use the -o
/--object
option:
To prettify the output in such cases, use the -p
/--pretty
option:
For valid JSON output, use the -j
/--json
option:
Read a local JSON file, escape any non-ASCII symbols, and save the result to a new file:
Or do the same with an online JSON file:
See jsesc --help
for the full list of options.
As of v2.0.0, jsesc supports Node.js v4+ only.
Older versions (up to jsesc v1.3.0) support Chrome 27, Firefox 3, Safari 4, Opera 10, IE 6, Node.js v6.0.0, Narwhal 0.3.2, RingoJS 0.8-0.11, PhantomJS 1.9.0, and Rhino 1.7RC4. Note: Using the json
option on objects or arrays that contain non-string values relies on JSON.parse()
. For legacy environments like IE ≤ 7, use a JSON
polyfill.
Mathias Bynens |
This library is available under the MIT license.