- ベストアンサー
urlの整形
あるページがありまして。 例)http://example.com/dir1/dir2/index.html このページに相対パスで画像のURLが記載していまして <img src="./.././dir3/../dir4/../../dir5/a.jpg" > これは実際には http://example.com/dir5/a.jpg ですです。 通常は上記のようには書かないのですが、 上記のように書かれたとしても 整形するアイディアがあれば教えて下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
回答の書き方がまずかった "./.././dir3/../dir4/../../dir5/a.jpg"という情報から"/dir5/a.jpg"を 得ることはできないということ。 "/dir1/dir2/./.././dir3/../dir4/../../dir5/a.jpg"からならとれます なんか効率的な関数がありそうですがrealpathは実体がないといけないようなので 雑ですが正規表現で書くとこんな感じ? <?PHP <?PHP $path="/dir1/dir2/./.././dir3/../dir4/../../dir5/a.jpg"; //(1) print $path." → ".get_path($path)."<br>"; $path="./.././dir3/../dir4/../../dir5/a.jpg"; //(2) print $path." → ".get_path($path)."<br>"; function get_path($path){ $pattern="/(?<=\/|^)\.\/|(?<=\/)([^\/]+|\.\.)\/\.\.\//"; $count=0; while(preg_match($pattern,$path)){ $path=preg_replace($pattern,"",$path); } return $path; } ?> (1)なら「/dir5/a.jpg」を得られますが、(2)だと「../../dir5/a.jpg」までですね
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
パスの区切りで分割( http://www.php.net/manual/ja/function.explode.php 等) ↓ 空の配列に順番に追加 ただし .. で、末尾を削除。ただし、配列が空だったり 末尾が .. だった時は末尾に追加 . なら追加しない ↓ 配列のパスの区切りで連結
- yambejp
- ベストアンサー率51% (3827/7415)
>./.././dir3/../dir4/../../dir5/a.jpg srcの最初がカレント(./)から参照をはじめており、 この条件だと「/dir5/a.jpg」を確定することはできないので無理
補足
相対ですので、 http://example.com/dir1/dir2/index.html からの相対となりますよね??
お礼
ありがとうございます。 やっぱり正規表現を使う手しかないですかねぇー。