如何使用 Delphi 在 TMS WEB Core 中对 URL 字符串进行编码/解码?

问题描述 投票:0回答:1

在我的 FireMonkey 应用程序中,我只需将

System.NetEncoding
单元添加到我的使用列表中,然后使用
TNetEncoding.URL.Encode()
TNetEncoding.URL.Decode()
功能,但
System.NetEncoding
在 TMS WEB Core 中不可用。

我也尝试过

IdURI
HTTPApp
单位,但它们也不可用。

TMS WEB Core 中是否有用于编码和解码 URL 的 TMS 单元?

delphi urlencode urldecode tms tms-web-core
1个回答
0
投票

Delphi 在处理 Url 编码方面有着悠久的历史:

  • TIdURI.URLEncode(url) - 有问题
  • HTTPApp.HttpEncode(url) - 在 Delphi 10.3 中已弃用
  • TNetEncoding.URL.Encode(s) - buggy

然后Windows本身有一系列功能可供选择:

如果您的 FireMoney 应用程序未在 Windows 上运行,那么您可能不得不简单地放弃并推出自己的应用程序。

请注意,很多实现会说 URL 中唯一有效的字符是:

`A`..`Z`, `a`..`z`, `0`..`9`, `-`, `_`, `~`, `.`

并逃避其他任何事情。实际上,以下是有效且允许的 URL:

http://example.com/:@-.!$&'(),=;:@-._~!$&'()*,=:@-.!$&'(),==?/?:@-._~!$'()*,;=/?:@-._~!$'()*,;==#/?:@-._~!$&'()*,;=
\__/   \_________/\________________________________________/\__________________________________/\_________________/
 |         |                         |                                        |                          |
Scheme   Host                       Path                                    Query                    Fragment

每个不同的部分对于允许的内容都有不同的规则。

部分 价值
方案
http
用户名
密码
主持人
example.com
港口
80
路径
/:@-.!$&'(),=;:@-._~!$&'()*,=:@-.!$&'(),==
查询
?/?:@-._~!$'()*,;=/?:@-._~!$'()*,;==
碎片
#/?:@-._~!$&'()*,;=

更重要的是,根据您的用例,也许您想要对整个字符串进行urlencode:

  • 之前:
    http://stackoverflow.com/
  • 之后:
    http%3A%2F%2Fstackoverflow.com%2F

也许在现实中你只想让它转义“坏”网址:

  • 之前:
    https://stackoverflow.com/terms of service
  • 之后:
    https://stackoverflow.com/terms%20of%20service

tl;dr:尝试使用 Windows。

© www.soinside.com 2019 - 2024. All rights reserved.