Safely Encoding Any String Into JavaScript Code Using JavaScript
By Adrian Sutton
When generating a JavaScript file dynamically it’s not uncommon to have to embed an arbitrary string into the resulting code so it can be operated on. For example:
function createCode(inputValue) {
return "function getValue() { return '" + inputValue + "'; }"
}
This simplistic version works great for simple strings:
createCode("Hello world!");
// Gives: function getValue() { return 'Hello world!'; }
But breaks as soon as inputValue contains a special character, e.g.
createCode("Hello 'quotes'!");
// Gives: function getValue() { return 'Hello 'quotes' !'; }
You can escape single quotes but it still breaks if the input contains a \ character. The easiest way to fully escape the string is to use JSON.stringify:
function createCode(inputValue) {
return "function getValue() { return " +
JSON.stringify(String(inputValue)) +
"; }"
}
Note that JSON.stringify even adds the quotes for us. This works because a JSON string is a JavaScript string, so if you pass a string to JSON.stringify it will return a perfectly valid JavaScript string complete with quotes that is guaranteed to evaluate back to the original string.
The one catch is that JSON.stringify will happily JavaScript objects and numbers, not just strings, so we need to force the value to be a string first – hence, String(inputValue).