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

处理URLs的函数

备注

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

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

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

标记为*的符号是RFC 3986中的子分隔符,允许用于用户信息后跟@符号。

提取URL部分的函数

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

protocol

提取URL中的协议。

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

domain

从URL中提取主机名。

语法

参数

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

在这些示例中,domain函数返回以下结果:

返回值

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

示例

domainRFC

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

语法

参数

返回值

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

示例

domainWithoutWWW

如果存在,则返回没有前导www.的域名。

语法

参数

返回值

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

示例

domainWithoutWWWRFC

如果存在,则返回没有前导www.的域名。类似于domainWithoutWWW,但符合RFC 3986。

语法

参数

返回值

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

示例

查询:

结果:

topLevelDomain

从URL中提取顶级域名。

参数

备注

可以使用或不使用协议来指定URL。示例:

返回值

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

示例

查询:

结果:

topLevelDomainRFC

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

参数

备注

可以使用或不使用协议来指定URL。示例:

返回值

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

示例

查询:

结果:

firstSignificantSubdomain

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

语法

参数

返回值

示例

查询:

结果:

firstSignificantSubdomainRFC

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

语法

参数

返回值

示例

查询:

结果:

cutToFirstSignificantSubdomain

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

语法

参数

返回值

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

示例

查询:

结果:

cutToFirstSignificantSubdomainRFC

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

语法

参数

返回值

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

示例

查询:

结果:

cutToFirstSignificantSubdomainWithWWW

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

语法

参数

返回值

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

示例

查询:

结果:

cutToFirstSignificantSubdomainWithWWWRFC

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

语法

参数

返回值

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

示例

查询:

结果:

cutToFirstSignificantSubdomainCustom

返回包含顶级子域的域名部分,直到第一个显著子域为止。 接受自定义TLD列表名称。 这个函数在需要新的TLD列表或拥有自定义列表时会很有用。

配置示例

语法

参数

返回值

  • 包含顶级子域的域名部分,直到第一个显著子域为止。 字符串.

示例

查询:

结果:

另见

cutToFirstSignificantSubdomainCustomRFC

返回包含顶级子域的域名部分,直到第一个显著子域为止。 接受自定义TLD列表名称。 这个函数在需要新的TLD列表或拥有自定义列表时会很有用。 类似于cutToFirstSignificantSubdomainCustom,但符合RFC 3986。

语法

参数

返回值

  • 包含顶级子域的域名部分,直到第一个显著子域为止。 字符串.

另见

cutToFirstSignificantSubdomainCustomWithWWW

返回包含顶级子域的域名部分,直到第一个显著子域为止,而不去掉www。 接受自定义TLD列表名称。 如果需要新TLD列表或拥有自定义列表时将非常有用。

配置示例

语法

参数

返回值

  • 包含顶级子域的域名部分,直到第一个显著子域为止,而不去掉www字符串.

示例

查询:

结果:

另见

cutToFirstSignificantSubdomainCustomWithWWWRFC

返回包含顶级子域的域名部分,直到第一个显著子域为止,而不去掉www。 接受自定义TLD列表名称。 如果需要新TLD列表或拥有自定义列表时将非常有用。 类似于cutToFirstSignificantSubdomainCustomWithWWW,但符合RFC 3986。

语法

参数

返回值

  • 包含顶级子域的域名部分,直到第一个显著子域为止,而不去掉www字符串.

另见

firstSignificantSubdomainCustom

返回第一个显著子域。 接受自定义TLD列表名称。 如果需要新的TLD列表或拥有自定义列表时会很有用。

配置示例:

语法

参数

返回值

示例

查询:

结果:

另见

firstSignificantSubdomainCustomRFC

返回第一个显著子域。 接受自定义TLD列表名称。 如果需要新的TLD列表或拥有自定义列表时会非常有用。 类似于firstSignificantSubdomainCustom,但符合RFC 3986。

语法

参数

返回值

另见

port

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

语法

参数

  • url — URL. 字符串.
  • default_port — 要返回的默认端口号. UInt16.

返回值

  • 端口号或默认端口(如果URL中没有端口或在验证错误的情况下)。 UInt16.

示例

查询:

结果:

portRFC

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

语法

参数

  • url — URL. 字符串.
  • default_port — 要返回的默认端口号. UInt16.

返回值

  • 端口号或默认端口(如果URL中没有端口或在验证错误的情况下)。 UInt16.

示例

查询:

结果:

path

返回没有查询字符串的路径。

示例:/top/news.html

pathFull

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

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

protocol

从URL中提取协议。

语法

参数

  • url — 用于提取协议的URL. 字符串.

返回值

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

示例

查询:

结果:

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)。

语法

参数

返回值

示例

查询:

结果:

删除URL部分的函数

如果URL没有类似内容,URL保持不变。

cutWWW

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

cutQueryString

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

cutFragment

移除片段标识符,包括井号。

cutQueryStringAndFragment

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

cutURLParameter(url, name)

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

语法

参数

返回值

  • 移除 name URL 参数后的 URL。字符串

示例

查询:

结果: