跳到主要内容
跳到主要内容

处理 URL 的函数

备注

本节提到的函数经过优化,以实现最大的性能,并且在大多数情况下不遵循 RFC-3986 标准。实现 RFC-3986 的函数在其函数名称后附加 RFC,通常较慢。

在处理不包含用户字符串或 @ 符号的公开注册域名时,通常可以使用非 RFC 函数变体。下表详细说明了 URL 中哪些符号可以 () 或不可以 () 被各自的 RFC 和非 RFC 变体解析:

符号RFCRFC
' '
\t
<
>
%✔*
{
}
|
\\
^
~✔*
[
]
;✔*
=✔*
&✔*

被标记为 * 的符号是 RFC 3986 中的子分隔符,并且在 @ 符号后允许作为用户信息。

提取 URL 部分的函数

如果 URL 中没有相关部分,将返回空字符串。

protocol

从 URL 中提取协议。

典型的返回值示例: http、https、ftp、mailto、tel、magnet。

domain

从 URL 中提取主机名。

语法

参数

URL 可以带协议或不带协议来指定。例如:

对于这些示例,domain 函数返回以下结果:

返回值

  • 如果输入字符串可以解析为 URL,则返回主机名,否则返回空字符串。 String

示例

domainRFC

从 URL 中提取主机名。类似于 domain,但符合 RFC 3986。

语法

参数

返回值

  • 如果输入字符串可以解析为 URL,则返回主机名,否则返回空字符串。 String

示例

domainWithoutWWW

返回不带前缀 www. 的域名(如果存在)。

语法

参数

返回值

  • 如果输入字符串可以解析为 URL(不带前缀 www.),则返回域名,否则返回空字符串。 String

示例

domainWithoutWWWRFC

返回不带前缀 www. 的域名(如果存在)。类似于 domainWithoutWWW 但符合 RFC 3986。

语法

参数

返回值

  • 如果输入字符串可以解析为 URL(不带前缀 www.),则返回域名,否则返回空字符串。 String

示例

查询:

结果:

topLevelDomain

从 URL 中提取顶级域名。

参数

备注

URL 可以带协议或不带协议来指定。例如:

返回值

  • 如果输入字符串可以解析为 URL,则返回域名。否则返回空字符串。 String

示例

查询:

结果:

topLevelDomainRFC

从 URL 中提取顶级域名。类似于 topLevelDomain,但符合 RFC 3986。

参数

备注

URL 可以带协议或不带协议来指定。例如:

返回值

  • 如果输入字符串可以解析为 URL,则返回域名。否则返回空字符串。 String

示例

查询:

结果:

firstSignificantSubdomain

返回“第一个显著子域名”。第一个显著子域名对于 comnetorgco 是二级域名,否则是三级域名。例如,firstSignificantSubdomain ('https://news.clickhouse.com/') = 'clickhouse'firstSignificantSubdomain ('https://news.clickhouse.com.tr/') = 'clickhouse'。显著的二级域名及其他实现细节的列表可能会在未来发生变化。

语法

参数

返回值

  • 第一个显著子域名。 String

示例

查询:

结果:

firstSignificantSubdomainRFC

返回“第一个显著子域名”。第一个显著子域名对于 comnetorgco 是二级域名,否则是三级域名。例如,firstSignificantSubdomain ('https://news.clickhouse.com/') = 'clickhouse'firstSignificantSubdomain ('https://news.clickhouse.com.tr/') = 'clickhouse'。显著的二级域名及其他实现细节的列表可能会在未来发生变化。类似于 firstSignficantSubdomain,但符合 RFC 1034。

语法

参数

返回值

  • 第一个显著子域名。 String

示例

查询:

结果:

cutToFirstSignificantSubdomain

返回域名的一部分,包括顶级子域名,直到“第一个显著子域名”为止。

语法

参数

返回值

  • 包含顶级子域名的域名部分,直到第一个显著子域名(如果可能),否则返回空字符串。 String

示例

查询:

结果:

cutToFirstSignificantSubdomainRFC

返回域名的一部分,包括顶级子域名,直到“第一个显著子域名”为止。类似于 cutToFirstSignificantSubdomain,但符合 RFC 3986。

语法

参数

返回值

  • 包含顶级子域名的域名部分,直到第一个显著子域名(如果可能),否则返回空字符串。 String

示例

查询:

结果:

cutToFirstSignificantSubdomainWithWWW

返回域名的一部分,包括顶级子域名,直到“第一个显著子域名”为止,不去掉 www

语法

参数

返回值

  • 包含顶级子域名的域名部分,直到第一个显著子域名(带 www,如果可能),否则返回空字符串。 String

示例

查询:

结果:

cutToFirstSignificantSubdomainWithWWWRFC

返回域名的一部分,包括顶级子域名,直到“第一个显著子域名”为止,不去掉 www。类似于 cutToFirstSignificantSubdomainWithWWW,但符合 RFC 3986。

语法

参数

返回值

  • 包含顶级子域名的域名部分,直到第一个显著子域名(带 "www",如果可能),否则返回空字符串。 String

示例

查询:

结果:

cutToFirstSignificantSubdomainCustom

返回域名的一部分,包括顶级子域名,直到第一个显著子域名。接受自定义 TLD 列表 名称。如果您需要一个新的 TLD 列表或有自定义列表,此函数可能会很有用。

配置示例

语法

参数

  • url — URL. String
  • tld — 自定义 TLD 列表名称。 String

返回值

  • 包含顶级子域名的域名部分,直到第一个显著子域名。 String

示例

查询:

结果:

参见

cutToFirstSignificantSubdomainCustomRFC

返回域名的一部分,包括顶级子域名,直到第一个显著子域名。接受自定义 TLD 列表 名称。如果您需要一个新的 TLD 列表或有自定义列表,此函数可能会很有用。类似于 cutToFirstSignificantSubdomainCustom,但符合 RFC 3986。

语法

参数

  • url — URL. String
  • tld — 自定义 TLD 列表名称。 String

返回值

  • 包含顶级子域名的域名部分,直到第一个显著子域名。 String

参见

cutToFirstSignificantSubdomainCustomWithWWW

返回域名的一部分,包括顶级子域名,直到第一个显著子域名,不去掉 www。接受自定义 TLD 列表名称。如果您需要一个新的 TLD 列表或有自定义列表,此函数可能会很有用。

配置示例

语法

参数

  • url — URL. String
  • tld — 自定义 TLD 列表名称。 String

返回值

  • 包含顶级子域名的域名部分,直到第一个显著子域名且不去掉 wwwString

示例

查询:

结果:

参见

cutToFirstSignificantSubdomainCustomWithWWWRFC

返回域名的一部分,包括顶级子域名,直到第一个显著子域名且不去掉 www。接受自定义 TLD 列表名称。如果您需要一个新的 TLD 列表或有自定义列表,此函数可能会很有用。类似于 cutToFirstSignificantSubdomainCustomWithWWW,但符合 RFC 3986。

语法

参数

  • url — URL. String
  • tld — 自定义 TLD 列表名称。 String

返回值

  • 包含顶级子域名的域名部分,直到第一个显著子域名且不去掉 wwwString

参见

firstSignificantSubdomainCustom

返回第一个显著子域名。接受自定义 TLD 列表名称。如果您需要新的 TLD 列表或有自定义,则该函数可能会很有用。

配置示例:

语法

参数

  • url — URL. String
  • tld — 自定义 TLD 列表名称。 String

返回值

  • 第一个显著子域名。 String

示例

查询:

结果:

参见

firstSignificantSubdomainCustomRFC

返回第一个显著子域名。接受自定义 TLD 列表名称。如果您需要新的 TLD 列表或有自定义,则该函数可能会很有用。类似于 firstSignificantSubdomainCustom,但符合 RFC 3986。

语法

参数

  • url — URL. String
  • tld — 自定义 TLD 列表名称。 String

返回值

  • 第一个显著子域名。 String

参见

port

如果 URL 不包含端口或无法解析,则返回端口或 default_port

语法

参数

  • url — URL. String
  • default_port — 默认端口号,将返回。 UInt16

返回值

  • 端口或默认端口,如果 URL 中没有端口或在验证错误情况下。 UInt16

示例

查询:

结果:

portRFC

如果 URL 不包含端口或无法解析,则返回端口或 default_port。类似于 port,但符合 RFC 3986。

语法

参数

  • url — URL. String
  • default_port — 默认端口号,将返回。 UInt16

返回值

  • 端口或默认端口,如果 URL 中没有端口或在验证错误情况下。 UInt16

示例

查询:

结果:

path

返回不带查询字符串的路径。

示例: /top/news.html

pathFull

与上述相同,但包括查询字符串和片段。

示例: /top/news.html?page=2#comments

protocol

从 URL 中提取协议。

语法

参数

  • url — 要提取协议的 URL。 String

返回值

  • 协议,如果无法确定则返回空字符串。 String

示例

查询:

结果:

queryString

返回查询字符串,不包括初始问号,## 后面的内容。

示例: page=1&lr=213

fragment

返回碎片标识符,不包括初始哈希符号。

queryStringAndFragment

返回查询字符串和碎片标识符。

示例: page=1#29390

extractURLParameter(url, name)

返回 URL 中 name 参数的值(如果存在),否则返回空字符串。如果有多个同名参数,将返回第一个出现的值。该函数假定 url 参数中的参数按照与 name 参数相同的方式编码。

extractURLParameters(url)

返回与 URL 参数对应的 name=value 字符串数组。值未解码。

extractURLParameterNames(url)

返回与 URL 参数名称对应的名称字符串数组。值未解码。

URLHierarchy(url)

返回一个数组,其中包含 URL,在路径和查询字符串中以符号 / 和 ? 截断。连续的分隔符字符计为一个。切割在所有连续分隔符字符之后的位置完成。

URLPathHierarchy(url)

与上述相同,但结果中不包含协议和主机。根元素 / 不包括。

encodeURLComponent(url)

返回编码后的 URL。

示例:

decodeURLComponent(url)

返回解码后的 URL。

示例:

encodeURLFormComponent(url)

返回编码后的 URL。遵循 rfc-1866,空格( )编码为加号(+)。

示例:

decodeURLFormComponent(url)

返回解码后的 URL。遵循 rfc-1866,普通加号(+)解码为空格( )。

示例:

netloc

从 URL 中提取网络位置 (username:password@host:port)。

语法

参数

返回值

  • username:password@host:portString

示例

查询:

结果:

移除 URL 部分的函数

如果 URL 没有类似的部分,则 URL 保持不变。

cutWWW

从 URL 的域中移除前导 www.(如果存在)。

cutQueryString

移除查询字符串,包括问号。

cutFragment

移除碎片标识符,包括数字符号。

cutQueryStringAndFragment

移除查询字符串和碎片标识符,包括问号和数字符号。

cutURLParameter(url, name)

从 URL 中移除 name 参数(如果存在)。此函数不对参数名称中的字符进行编码或解码,例如 Client IDClient%20ID 被视为不同的参数名称。

语法

参数

  • url — URL. String
  • name — URL 参数的名称。 StringArray 的字符串。

返回值

  • 移除 name URL 参数后的 URL。 String

示例

查询:

结果: