• ベストアンサー

urlの整形

あるページがありまして。 例)http://example.com/dir1/dir2/index.html このページに相対パスで画像のURLが記載していまして <img src="./.././dir3/../dir4/../../dir5/a.jpg" > これは実際には http://example.com/dir5/a.jpg ですです。 通常は上記のようには書かないのですが、 上記のように書かれたとしても 整形するアイディアがあれば教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

回答の書き方がまずかった "./.././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」までですね

muuming2001
質問者

お礼

ありがとうございます。 やっぱり正規表現を使う手しかないですかねぇー。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

パスの区切りで分割( http://www.php.net/manual/ja/function.explode.php 等) ↓ 空の配列に順番に追加 ただし .. で、末尾を削除。ただし、配列が空だったり 末尾が .. だった時は末尾に追加 . なら追加しない ↓ 配列のパスの区切りで連結

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>./.././dir3/../dir4/../../dir5/a.jpg srcの最初がカレント(./)から参照をはじめており、 この条件だと「/dir5/a.jpg」を確定することはできないので無理

muuming2001
質問者

補足

相対ですので、 http://example.com/dir1/dir2/index.html からの相対となりますよね??

関連するQ&A