Domanda

Sto facendo un produttore di sitemap in Object Pascal e ho bisogno di una buona funzione o lib per emulare parse_url su PHP.

Qualcuno ne conosce qualcuno di buono?

È stato utile?

Soluzione

Freepascal ha l'unità URIParser con la funzione ParseURI. Un esempio su come usarlo può essere trovato in uno degli esempi in fonte di Freepascal . O un vecchio esempio che è in qualche modo più facile da capire.

Altri suggerimenti

Non ho familiarità con la funzione parse_url su PHP, ma potresti provare classe TIdURI inclusa nella Indy (che a sua volta è incluso con le versioni più recenti di Delphi). Penso che lo abbiano portato anche su FreePascal.

  

TIdURI è un discendente di TObject che incapsula un identificatore di risorse universale, come descritto nel documento Standard Internet:

     
    

RFC 1630 - Identificatori di risorse universali nel WWW

  
     

TIdURI fornisce metodi e proprietà per l'assemblaggio e lo smontaggio degli URI utilizzando le parti componenti che compongono l'URI, tra cui: Protocollo, Host, Porta, Percorso, Documento e Segnalibro.

Se il problema persiste, fornisci un esempio specifico di ciò che stai cercando di realizzare - cosa stai cercando di analizzare da un URL .

Stai attento con la classe TIdURI di Indy. Doveva essere un parser generico, ma ha alcuni bug e difetti di progettazione che gli impediscono di essere un parser pienamente conforme. Attualmente sto scrivendo una nuova classe da zero per Indy 11 in sostituzione di TIdURI. Sarà un parser URI pienamente conforme e supporterà anche l'analisi dell'IRI (RFC 3987).

Se stai usando wininet.dll puoi anche usare il loro InternetCrackUrl API.

URI RFC elenca questa espressione regolare per l'analisi URI:

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

Dove sono i numeri questi gruppi:

  $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

Per questo URI:

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

L'espressione regolare è piuttosto semplice e non utilizza alcuna funzionalità speciale che l'espressione regolare lib deve fornire, quindi prendine una compatibile con l'implementazione pasquale e il gioco è fatto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top