2

我在 Object Pascal 中做一个站点地图生成器,需要一个好的函数或库来模拟 PHP 上的parse_url函数。

有谁知道有什么好的吗?

4

5 回答 5

2

我不熟悉 PHP 上的 parse_url 函数,但您可以尝试Indy中包含的TIdURI类(该类又包含在最新的 Delphi 版本中)。我认为他们也将其移植到了 FreePascal。

TIdURI 是封装通用资源标识符的 TObject 后代,如 Internet 标准文档中所述:

RFC 1630 - WWW 中的通用资源标识符

TIdURI 为使用构成 URI 的组件部分(包括:协议、主机、端口、路径、文档和书签)来组装和反汇编 URI 提供方法和属性。

如果这不起作用,请给出一个具体示例来说明您要完成的工作-您要从 URL 中解析出什么

于 2008-09-23T22:30:16.883 回答
2

Freepascal 具有带有 ParseURI 功能的单元 URIParser。如何使用它的示例可以在Freepascal 的源代码中的示例之一中找到。或者一个更容易理解的老例子。

于 2008-09-24T09:11:45.780 回答
2

小心 Indy 的 TIdURI 类。它应该是一个通用的解析器,但它有一些错误和设计缺陷,使其无法成为一个完全兼容的解析器。我目前正在从头开始为 Indy 11 编写一个新类来替换 TIdURI。它将是一个完全兼容的 URI 解析器,它还将支持 IRI (RFC 3987) 解析。

于 2009-02-02T01:55:46.197 回答
1

如果您使用的是 wininet.dll,您还可以使用他们的InternetCrackUrl API。

于 2008-09-24T06:21:18.233 回答
0

URI RFC列出了这个用于 URI 解析的正则表达式:

  ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
   12            3  4          5       6  7        8 9

这些组的数字在哪里:

  $1 = http:
  $2 = http
  $3 = //www.ics.uci.edu
  $4 = www.ics.uci.edu
  $5 = /pub/ietf/uri/
  $6 = <undefined>
  $7 = <undefined>
  $8 = #Related
  $9 = Related

对于此 URI:

  http://www.ics.uci.edu/pub/ietf/uri/#Related

正则表达式非常简单,并且没有使用正则表达式库必须提供的特殊功能,因此请使用与您的 pascal 实现兼容的功能,然后就可以了。

于 2008-09-23T22:00:33.197 回答