处理URLs的函数
本节提到的函数经过优化,以获得最佳性能,并且在大多数情况下不遵循RFC-3986标准。实现RFC-3986的函数名称后缀为RFC
,通常速度较慢。
在处理不包含用户字符串或@
符号的公共注册域名时,通常可以使用非RFC
函数变体。
下表详细说明了在URL中哪些符号可以 (✔
) 或不能 (✗
) 由相应的RFC
和非RFC
变体解析:
符号 | non-RFC | RFC |
---|---|---|
' ' | ✗ | ✗ |
\t | ✗ | ✗ |
< | ✗ | ✗ |
> | ✗ | ✗ |
% | ✗ | ✔* |
{ | ✗ | ✗ |
} | ✗ | ✗ |
| | ✗ | ✗ |
\\ | ✗ | ✗ |
^ | ✗ | ✗ |
~ | ✗ | ✔* |
[ | ✗ | ✗ |
] | ✗ | ✔ |
; | ✗ | ✔* |
= | ✗ | ✔* |
& | ✗ | ✔* |
标记为*
的符号是RFC 3986中的子分隔符,允许用于用户信息后跟@
符号。
提取URL部分的函数
如果URL中没有相关部分,则返回空字符串。
protocol
提取URL中的协议。
典型返回值示例: http, https, ftp, mailto, tel, magnet。
domain
从URL中提取主机名。
语法
参数
url
— URL. 字符串.
可以使用或不使用协议来指定URL。例如:
在这些示例中,domain
函数返回以下结果:
返回值
- 如果输入字符串可以解析为URL,则返回主机名,否则返回空字符串。 字符串.
示例
domainRFC
从URL中提取主机名。类似于domain,但符合RFC 3986。
语法
参数
url
— URL. 字符串.
返回值
- 如果输入字符串可以解析为URL,则返回主机名,否则返回空字符串。 字符串.
示例
domainWithoutWWW
如果存在,则返回没有前导www.
的域名。
语法
参数
url
— URL. 字符串.
返回值
- 如果输入字符串可以解析为URL(不包含前导
www.
),则返回域名,否则返回空字符串。 字符串.
示例
domainWithoutWWWRFC
如果存在,则返回没有前导www.
的域名。类似于domainWithoutWWW,但符合RFC 3986。
语法
参数
url
— URL. 字符串.
返回值
- 如果输入字符串可以解析为URL(不包含前导
www.
),则返回域名,否则返回空字符串。 字符串.
示例
查询:
结果:
topLevelDomain
从URL中提取顶级域名。
参数
url
— URL. 字符串.
可以使用或不使用协议来指定URL。示例:
返回值
- 如果输入字符串可以解析为URL,则返回域名。否则返回空字符串。 字符串.
示例
查询:
结果:
topLevelDomainRFC
从URL中提取顶级域名。 类似于topLevelDomain,但符合RFC 3986。
参数
url
— URL. 字符串.
可以使用或不使用协议来指定URL。示例:
返回值
- 如果输入字符串可以解析为URL,则返回域名。否则返回空字符串。 字符串.
示例
查询:
结果:
firstSignificantSubdomain
返回“第一个显著子域”。
第一个显著子域是com
、net
、org
或co
的二级域名,否则是三级域名。
例如,firstSignificantSubdomain ('https://news.clickhouse.com/') = 'clickhouse', firstSignificantSubdomain ('https://news.clickhouse.com.tr/') = 'clickhouse'
。
“无关紧要”的二级域名的列表和其他实现细节可能将来会发生变化。
语法
参数
url
— URL. 字符串.
返回值
- 第一个显著子域。 字符串.
示例
查询:
结果:
firstSignificantSubdomainRFC
返回“第一个显著子域”。
第一个显著子域是com
、net
、org
或co
的二级域名,否则是三级域名。
例如,firstSignificantSubdomain ('https://news.clickhouse.com/') = 'clickhouse', firstSignificantSubdomain ('https://news.clickhouse.com.tr/') = 'clickhouse'
。
“无关紧要”的二级域名的列表和其他实现细节可能将来会发生变化。
类似于firstSignficantSubdomain,但符合RFC 1034。
语法
参数
url
— URL. 字符串.
返回值
- 第一个显著子域。 字符串.
示例
查询:
结果:
cutToFirstSignificantSubdomain
返回包含顶级子域的域名部分,直到"第一个显著子域"为止。
语法
参数
url
— URL. 字符串.
返回值
- 包含顶级子域的域名部分,直到第一个显著子域为止(如果可能),否则返回空字符串。 字符串.
示例
查询:
结果:
cutToFirstSignificantSubdomainRFC
返回包含顶级子域的域名部分,直到"第一个显著子域"为止。 类似于cutToFirstSignificantSubdomain,但符合RFC 3986。
语法
参数
url
— URL. 字符串.
返回值
- 包含顶级子域的域名部分,直到第一个显著子域为止(如果可能),否则返回空字符串。 字符串.
示例
查询:
结果:
cutToFirstSignificantSubdomainWithWWW
返回包含顶级子域的域名部分,直到"第一个显著子域"为止,而不去掉www
。
语法
参数
url
— URL. 字符串.
返回值
- 包含顶级子域的域名部分,直到第一个显著子域为止(如果可能,包含
www
),否则返回空字符串。 字符串.
示例
查询:
结果:
cutToFirstSignificantSubdomainWithWWWRFC
返回包含顶级子域的域名部分,直到"第一个显著子域"为止,而不去掉www
。
类似于cutToFirstSignificantSubdomainWithWWW,但符合RFC 3986。
语法
参数
url
— URL. 字符串.
返回值
- 包含顶级子域的域名部分,直到第一个显著子域为止(如果可能,包含"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中没有端口或在验证错误的情况下)。 UInt16.
示例
查询:
结果:
portRFC
返回端口号,或者如果URL不包含端口或无法解析,则返回default_port
。
类似于port,但符合RFC 3986。
语法
参数
返回值
- 端口号或默认端口(如果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. 字符串.
返回值
username:password@host:port
. 字符串.
示例
查询:
结果:
删除URL部分的函数
如果URL没有类似内容,URL保持不变。
cutWWW
从URL的域中删除前导www.
(如果存在)。
cutQueryString
移除查询字符串,包括问号。
cutFragment
移除片段标识符,包括井号。
cutQueryStringAndFragment
移除查询字符串和片段标识符,包括问号和井号。
cutURLParameter(url, name)
从 URL 中移除 name
参数(如果存在)。
此函数不会对参数名称中的字符进行编码或解码,例如 Client ID
和 Client%20ID
被视为不同的参数名称。
语法
参数
返回值
- 移除
name
URL 参数后的 URL。字符串。
示例
查询:
结果: