一个Delphi / FreePascal lib或函数,它模拟PHP的函数parse_url

时间:2008-09-23 21:56:30

标签: delphi parsing freepascal url-parsing

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

有谁知道有什么好的?

5 个答案:

答案 0 :(得分:2)

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

  

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

     
    

RFC 1630 - Universal Resource Identifiers in WWW

  
     

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

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

答案 1 :(得分:2)

Freepascal具有带有ParseURI功能的单元URIParser。可以在Freepascal's source中的一个示例中找到如何使用它的示例。或old example更容易理解。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

答案 4 :(得分: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

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