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

有谁知道有什么好的?

有帮助吗?

解决方案

Freepascal具有带有ParseURI功能的单元URIParser。如何使用它的示例可以在 Freepascal的来源。或者旧示例,这有点容易理解。

其他提示

我不熟悉PHP上的parse_url函数,但您可以尝试附带的”TIdURI类“> TIdURI 类的在线文档Indy (反过来包含在最新的Delphi版本中)。我认为他们也将它移植到FreePascal。

  

TIdURI是一个TObject后代,它封装了一个统一资源标识符,如Internet标准文档中所述:

     
    

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

  
     

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

如果这不起作用,请举例说明您要完成的工作 - 您试图通过网址解析什么

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

如果你正在使用wininet.dll,你也可以使用他们的 InternetCrackUrl API。

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

正则表达式非常简单,并且没有使用正则表达式lib必须提供的特殊功能,因此请抓取一个与您的pascal实现兼容的表达式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top