PHP の関数 parse_url をエミュレートする Delphi/FreePascal ライブラリまたは関数

StackOverflow https://stackoverflow.com/questions/124170

質問

Object Pascal でサイトマッププロデューサーを実行しているのですが、サイトマップをエミュレートするための優れた関数またはライブラリが必要です。 parse_url PHP上の関数。

誰か良いものを知っていますか?

役に立ちましたか?

解決

Freepascal には、ParseURI 関数を備えたユニット URIParser があります。これを使用する例は、次のいずれかの例にあります。 フリーパスカルのソース. 。または 古い例 これはいくらか理解しやすいです。

他のヒント

PHP の parse_url 関数には詳しくありませんが、試してみるとよいでしょう。 ティドゥリ に含まれるクラス インディ (これは、最新の Delphi リリースに含まれています)。FreePascalにも移植したと思います。

TIdURI は、インターネット標準ドキュメントで説明されているように、Universal Resource Identifier をカプセル化する TObject の子孫です。

RFC 1630 - WWW のユニバーサル リソース識別子

TIdURI は、URI を構成する次のようなコンポーネント部分を使用して、URI のアセンブリと逆アセンブリのためのメソッドとプロパティを提供します。プロトコル、ホスト、ポート、パス、ドキュメント、ブックマーク。

それがうまくいかない場合は、達成しようとしていることの具体的な例を示してください。 URLから何を解析しようとしているのですか.

Indy の TIdURI クラスには注意してください。これは汎用パーサーであるはずでしたが、いくつかのバグと設計上の欠陥があり、完全に準拠したパーサーになることができませんでした。私は現在、TIdURI を置き換える Indy 11 用の新しいクラスを最初から作成しているところです。これは完全に準拠した URI パーサーとなり、IRI (RFC 3987) 解析もサポートします。

wininet.dll を使用している場合は、wininet.dll のものも使用できます。 インターネットクラックURL 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

正規表現は非常に単純で、正規表現ライブラリが提供する特別な機能を使用していないため、Pascal 実装と互換性のある正規表現を入手すれば、それで済みます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top