模拟PHP函数parse_url的Delphi / FreePascal lib或者函数
时间:2020-03-06 14:37:49 来源:igfitidea点击:
我正在用Object Pascal做站点地图生成器,需要一个好的函数或者lib来模拟PHP上的parse_url函数。
有谁知道任何好人吗?
解决方案
URI RFC列出了此正则表达式用于URI解析:
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 12 3 4 5 6 7 8 9
这些组的编号是:
= http: = http = //www.ics.uci.edu = www.ics.uci.edu = /pub/ietf/uri/ = <undefined> = <undefined> = #Related = Related
对于此URI:
http://www.ics.uci.edu/pub/ietf/uri/#Related
正则表达式非常简单,并且不使用正则表达式库必须提供的特殊功能,因此请抓住与pascal实现兼容的正则表达式。
我对PHP上的parse_url函数不熟悉,但是我们可以尝试Indy附带的TIdURI类(最新的Delphi版本中附带的TIdURI类)。我认为他们也将其移植到FreePascal。
TIdURI is a TObject descendant that encapsulates a Universal Resource Identifier, as described in the Internet Standards document: RFC 1630 - Universal Resource Identifiers in WWW
TIdURI提供了使用组成URI的组件来组装和拆卸URI的方法和属性,包括:协议,主机,端口,路径,文档和书签。
如果这不起作用,请给出一个具体示例,说明我们要完成的工作,以及要尝试从URL解析的内容。
如果我们使用的是wininet.dll,则还可以使用其InternetCrackUrl API。
Freepascal具有带ParseURI函数的URIParser单元。在Freepascal的源代码中的一个示例中可以找到如何使用它的示例。还是一个较容易理解的旧示例。
小心Indy的TIdURI类。它本来应该是通用解析器,但是它有一些错误和设计缺陷,使它无法成为完全兼容的解析器。我目前正在为Indy 11从头开始编写一个新类来替换TIdURI。这将是一个完全兼容的URI解析器,并且还将支持IRI(RFC 3987)解析。