diff --git a/sdk/api/@ohos.url.ets b/sdk/api/@ohos.url.ets index 6c55a6ec2b94d2d3daa63056326bb8c3fb33dce8..4f80a7143ccc8a690d03557b5e7447178d725878 100644 --- a/sdk/api/@ohos.url.ets +++ b/sdk/api/@ohos.url.ets @@ -85,10 +85,10 @@ export namespace url { static PATH_PERCENT_SIGN_CHARS = new Int8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x00 - 0x0F 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x10 - 0x1F - 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x20 - 0x2F - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, // 0x30 - 0x3F + 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x20 - 0x2F + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, // 0x30 - 0x3F 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x40 - 0x4F - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x50 - 0x5F // todo 5c + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, // 0x50 - 0x5F // todo 5c 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 - 0x6F 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, // 0x70 - 0x7F ]); @@ -100,7 +100,7 @@ export namespace url { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x20 - 0x2F 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, // 0x30 - 0x3F 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x40 - 0x4F - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, // 0x50 - 0x5F + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, // 0x50 - 0x5F 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 - 0x6F 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, // 0x70 - 0x7F ]); @@ -109,10 +109,10 @@ export namespace url { static QUERY_PERCENT_SIGN_CHARS = new Int8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x00 - 0x0F 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x10 - 0x1F - 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, // 0x20 - 0x2F + 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x20 - 0x2F 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, // 0x30 - 0x3F 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x40 - 0x4F - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x50 - 0x5F + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, // 0x50 - 0x5F 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 - 0x6F 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, // 0x70 - 0x7F ]); @@ -196,19 +196,6 @@ export namespace url { return trimHead.substring(0, i + 1); } - function deleteTabOrNewline(input: string): string { - let res = ""; - for (let i = 0; i < input.length; i++) { - let ch = input[i]; - if (ch == c'\t' || ch == c'\n' || ch == c'\r') { - continue; - } else { - res += ch; - } - } - return res; - } - function isAlpha(char: string): boolean { return char.length == 1 && ((char[0] >= c'a' && char[0] <= c'z') || (char[0] >= c'A' && char[0] <= c'Z')); } @@ -517,7 +504,7 @@ export namespace url { } class InnerURL { - flags: boolean[] = [false, false, false, false, false, false, false, false, false, false, false]; + flags: boolean[] = [false, false, false, false, false, false, false, false, false, false, false, false]; cScheme: string = ""; cFragment: string = ""; cQuery: string = ""; @@ -1097,6 +1084,9 @@ export namespace url { if (inputLen > 0) { this.cIsSpecialPath = input[0] != c'/' ? true : false; } + if (this.flags[11] && inputLen == 2) { + return; + } this.analysizeNoDefaultProtocol(input); } } @@ -1110,6 +1100,7 @@ export namespace url { if (tempInput.indexOf(':') != -1) { let pos = tempInput.indexOf(':'); pos++; + this.flags[11] = (input[pos] == c'/' && input[pos + 1] == c'/'); let scheme: string = tempInput.substring(0, pos); if (!this.analysizeScheme(scheme)) { return tempInput; @@ -1171,8 +1162,7 @@ export namespace url { parseSingleUrl(inputUrl: string): string { let trimedStr = deleteC0OrSpace(inputUrl); - let processInput = deleteTabOrNewline(trimedStr); - return this.initOnlyInput(processInput); + return this.initOnlyInput(trimedStr); } constructor() { } @@ -1260,13 +1250,6 @@ export namespace url { this.flags[1] = true; } this.cScheme = tempUrl.cScheme; - for (let key of Helper.head.keys()) { - let value = Helper.head.get(key); - if (key == this.cScheme && value == this.cPort) { - this.cPort = -1; - this.flags[5] = false; - } - } } } @@ -1384,7 +1367,6 @@ export namespace url { setHref(input: string) { let str: string = input; str = deleteC0OrSpace(str); - str = deleteTabOrNewline(str); let newUrl: InnerURL = new InnerURL(); newUrl.initOnlyInput(str); this.flags = newUrl.flags; @@ -1522,6 +1504,10 @@ export namespace url { getIsIpv6(): boolean { return this.flags[10] ? true : false; } + + hasDoubleSlash(): boolean { + return this.flags[11]; + } } function baseIntoUrl(base: InnerURL, res: InnerURL, inputIsEmpty: boolean) { @@ -1594,6 +1580,7 @@ export namespace url { dst.cOrigin = src.getScheme() + '//' + src.getHost(); dst.cParams = new URLParams(src.getEncodeSearch()); dst.cParams.parentUrl = dst; + dst.cHasDoubleSlash = src.hasDoubleSlash(); dst.setHref(); } @@ -1626,6 +1613,7 @@ export namespace url { cProtocol: string = ''; cPathname: string = ''; cPort: string = ''; + cHasDoubleSlash: boolean = false; cParams: URLParams = new URLParams(); constructor() { } @@ -1668,7 +1656,6 @@ export namespace url { if (this.cProtocol == "file:" && (this.cHost == "" || this.cHost == null)) { return; } - scheme = deleteTabOrNewline(scheme) this.urlInner.setScheme(scheme); this.cProtocol = this.urlInner.getScheme(); this.cHost = this.urlInner.getHost(); @@ -1721,7 +1708,6 @@ export namespace url { } set hash(fragment: string) { - fragment = deleteTabOrNewline(fragment) this.urlInner.setFragment(fixIllegalString(fragment)); this.cHash = this.urlInner.getFragment(); this.setHref(); @@ -1732,7 +1718,6 @@ export namespace url { } set search(query: string) { - query = deleteTabOrNewline(query) this.urlInner.setEncodeSearch(fixIllegalString(query)); this.cSearch = this.urlInner.getEncodeSearch(); this.cParams.updateParams(this.cSearch); @@ -1744,7 +1729,6 @@ export namespace url { } set hostname(hostname: string) { - hostname = deleteTabOrNewline(hostname) this.urlInner.setHostName(hostname); this.cHostname = this.urlInner.getHostName(); this.setHref(); @@ -1755,7 +1739,6 @@ export namespace url { } set host(host: string) { - host = deleteTabOrNewline(host) this.urlInner.setHost(host); this.cHost = this.urlInner.getHost(); this.cHostname = this.urlInner.getHostName(); @@ -1771,7 +1754,6 @@ export namespace url { if (this.cHost == '' || this.cProtocol == 'file:' || port == '') { return; } - port = deleteTabOrNewline(port) this.urlInner.setPort(port); this.cPort = this.urlInner.getPort(); this.setHref(); @@ -1782,7 +1764,6 @@ export namespace url { } set pathname(path: string) { - path = deleteTabOrNewline(path) this.urlInner.setPath(fixIllegalString(path)); this.cPathname = this.urlInner.getPath(); this.setHref(); @@ -1811,8 +1792,10 @@ export namespace url { setHref(): void { let temp: string = this.cProtocol; - if (this.cHostname != "") { + if (this.cHostname != "" || this.cProtocol == "file:" || this.cHasDoubleSlash) { temp += "//"; + } + if (this.cHostname != "") { if (this.cPassword != "" || this.cUsername != "") { if (this.cUsername != "") { temp += this.cUsername; @@ -1828,8 +1811,6 @@ export namespace url { temp += ":"; temp += this.cPort; } - } else if (this.cProtocol == "file:") { - temp += "//"; } temp += this.cPathname; if (this.cSearch) {