From 9e246dd7fa010f2b8e112ec5a57491167556c55a Mon Sep 17 00:00:00 2001 From: Richard Gibson Date: Tue, 21 Aug 2012 08:59:51 -0400 Subject: [PATCH] Fix #12350: jQuery.trim should remove BOM --- src/core.js | 6 +++--- test/unit/core.js | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/core.js b/src/core.js index e7b94acda9..4652c5ad7d 100644 --- a/src/core.js +++ b/src/core.js @@ -37,8 +37,8 @@ var core_rnotwhite = /\S/, core_rspace = /\s+/, - // IE doesn't match non-breaking spaces with \s - rtrim = core_rnotwhite.test("\xA0") ? (/^[\s\xA0]+|[\s\xA0]+$/g) : /^\s+|\s+$/g, + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, // A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (#9521) @@ -605,7 +605,7 @@ jQuery.extend({ }, // Use native String.trim function wherever possible - trim: core_trim ? + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? function( text ) { return text == null ? "" : diff --git a/test/unit/core.js b/test/unit/core.js index 44920edcf9..8b8b7afd80 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -264,7 +264,7 @@ test("noConflict", function() { }); test("trim", function() { - expect(9); + expect(13); var nbsp = String.fromCharCode(160); @@ -278,6 +278,11 @@ test("trim", function() { equal( jQuery.trim( null ), "", "Null" ); equal( jQuery.trim( 5 ), "5", "Number" ); equal( jQuery.trim( false ), "false", "Boolean" ); + + equal( jQuery.trim(" "), "", "space should be trimmed" ); + equal( jQuery.trim("ipad\xA0"), "ipad", "nbsp should be trimmed" ); + equal( jQuery.trim("\uFEFF"), "", "zwsp should be trimmed" ); + equal( jQuery.trim("\uFEFF \xA0! | \uFEFF"), "! |", "leading/trailing should be trimmed" ); }); test("type", function() {