我在Object Pascal中做一个站点地图生成器,需要一个好的函数或lib来模拟PHP上的parse_url函数。
有谁知道有什么好的?
答案 0 :(得分:2)
我不熟悉PHP上的parse_url函数,但您可以尝试TIdURI中包含的Indy类(后者包含在最新的Delphi版本中)。我认为他们也将它移植到FreePascal。
TIdURI是一个TObject后代,它封装了一个统一资源标识符,如Internet标准文档中所述:
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实现兼容的表达式。