From db9a7459c3439c282ddcb7353e00491aeb704d22 Mon Sep 17 00:00:00 2001 From: ZYSzys <17367077526@163.com> Date: Thu, 8 Nov 2018 14:17:14 +0800 Subject: lib: move encodeStr function to internal for reusable PR-URL: https://github.com/nodejs/node/pull/24242 Reviewed-By: James M Snell --- lib/internal/url.js | 65 +---------------------------------------------------- 1 file changed, 1 insertion(+), 64 deletions(-) (limited to 'lib/internal/url.js') diff --git a/lib/internal/url.js b/lib/internal/url.js index 693f082aed..44b658b2d9 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -2,6 +2,7 @@ const util = require('util'); const { + encodeStr, hexTable, isHexTable } = require('internal/querystring'); @@ -833,70 +834,6 @@ const noEscape = [ const paramHexTable = hexTable.slice(); paramHexTable[0x20] = '+'; -function encodeStr(str, noEscapeTable, hexTable) { - const len = str.length; - if (len === 0) - return ''; - - var out = ''; - var lastPos = 0; - - for (var i = 0; i < len; i++) { - var c = str.charCodeAt(i); - - // ASCII - if (c < 0x80) { - if (noEscapeTable[c] === 1) - continue; - if (lastPos < i) - out += str.slice(lastPos, i); - lastPos = i + 1; - out += hexTable[c]; - continue; - } - - if (lastPos < i) - out += str.slice(lastPos, i); - - // Multi-byte characters ... - if (c < 0x800) { - lastPos = i + 1; - out += hexTable[0xC0 | (c >> 6)] + - hexTable[0x80 | (c & 0x3F)]; - continue; - } - if (c < 0xD800 || c >= 0xE000) { - lastPos = i + 1; - out += hexTable[0xE0 | (c >> 12)] + - hexTable[0x80 | ((c >> 6) & 0x3F)] + - hexTable[0x80 | (c & 0x3F)]; - continue; - } - // Surrogate pair - ++i; - var c2; - if (i < len) - c2 = str.charCodeAt(i) & 0x3FF; - else { - // This branch should never happen because all URLSearchParams entries - // should already be converted to USVString. But, included for - // completion's sake anyway. - c2 = 0; - } - lastPos = i + 1; - c = 0x10000 + (((c & 0x3FF) << 10) | c2); - out += hexTable[0xF0 | (c >> 18)] + - hexTable[0x80 | ((c >> 12) & 0x3F)] + - hexTable[0x80 | ((c >> 6) & 0x3F)] + - hexTable[0x80 | (c & 0x3F)]; - } - if (lastPos === 0) - return str; - if (lastPos < len) - return out + str.slice(lastPos); - return out; -} - // application/x-www-form-urlencoded serializer // Ref: https://url.spec.whatwg.org/#concept-urlencoded-serializer function serializeParams(array) { -- cgit v1.2.3