ベースURLと潜在的に相対的なパスからURLを構築するPHPとは何ですか? Pythonはurlparse.urljoin
を提供していますが、PHPでは標準実装がないようです。Pythonの `urljoin`に相当するPHP
私が見つけた最も近い人々がparse_url
の使用を示唆して、パーツからURLを再構築するが、一般的にプロトコル相対リンクのようなものが誤解していることやって実装は、(例えば、//example.com/foo
を継承し、http://example.com/foo
またはhttps://example.com/foo
になりつつありますベースURLのプロトコル)、親ディレクトリリンクなどの処理も簡単にはできません。ここでurlparse.urljoin
で正しく動作してそれらのものの例は以下のとおりです。
>>> from urlparse import urljoin
>>> urljoin('http://example.com/some/directory/filepart', 'foo.jpg')
'http://example.com/some/directory/foo.jpg'
>>> urljoin('http://example.com/some/directory/', 'foo.jpg')
'http://example.com/some/directory/foo.jpg'
>>> urljoin('http://example.com/some/directory/', '../foo.jpg')
'http://example.com/some/foo.jpg'
>>> urljoin('http://example.com/some/directory/', '/foo.jpg')
'http://example.com/foo.jpg'
>>> urljoin('http://example.com/some/directory/', '//images.example.com/bar.jpg')
'http://images.example.com/bar.jpg'
>>> urljoin('https://example.com/some/directory/', '//images.example.com/bar.jpg')
'https://images.example.com/bar.jpg'
>>> urljoin('ftp://example.com/some/directory/', '//images.example.com/bar.jpg')
'ftp://images.example.com/bar.jpg'
>>> urljoin('http://example.com:8080/some/directory/', '//images.example.com/bar.jpg')
'http://images.example.com/bar.jpg'
は実際に正しいこれらの例すべてを取得するPHPで同じことを達成するための慣用的な方法、または定評のあるシンプルなライブラリや実装がありますか?
私はあなたがそれを作らなければならないと信じています –
@RyanVincent私はまだそれ以上の方法で 'parse_url'以上の何かをしていることはありません。相対パスの連結は、単にURL部分を無制限に置き換えるよりも複雑です。 – fluffy