diff --git a/lodash.js b/lodash.js index c775fefc5..ef5c6d983 100644 --- a/lodash.js +++ b/lodash.js @@ -40,8 +40,8 @@ reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; /** Used to match HTML entities and HTML characters */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, - reUnescapedHtml = /[&<>"']/g; + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, + reUnescapedHtml = /[&<>"'`]/g; /** Used to match template delimiters */ var reEscape = /<%-([\s\S]+?)%>/g, @@ -157,13 +157,19 @@ * unless they're part of a tag or unquoted attribute value. * See [Mathias' article](http://mathiasbynens.be/notes/ambiguous-ampersands) * (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in Internet Explorer <= 8, they can be used + * to break out of unquoted attribute values or HTML comments. See + * , , and + * for more details. */ var htmlEscapes = { '&': '&', '<': '<', '>': '>', '"': '"', - "'": ''' + "'": ''', + '`': '`' }; /** Used to convert HTML entities to characters */ @@ -172,7 +178,8 @@ '<': '<', '>': '>', '"': '"', - ''': "'" + ''': "'", + '`': '`' }; /** diff --git a/test/test.js b/test/test.js index 8f18679a7..b329635e4 100644 --- a/test/test.js +++ b/test/test.js @@ -2372,8 +2372,8 @@ QUnit.module('lodash.escape'); (function() { - var escaped = '&<>"'\/', - unescaped = '&<>"\'\/'; + var escaped = '&<>"'`\/', + unescaped = '&<>"\'`\/'; test('should escape values', 1, function() { strictEqual(_.escape(unescaped), escaped);