• ベストアンサー

urlの整形

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

  • PHP
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • 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

  • URlについて

    相対パスを絶対パスに変えたいのですが、 どのような方法があるでしょうか? 【URL】 http://www.example.com/aaa/index.html 【相対パス】 <img src="../bbb.jpg"> ../bbb.jpg 【絶対パス】 <img src="http://www.example.com/bbb.jpg"> http://www.example.com/bbb.jpg

    • 締切済み
    • PHP
  • 正規表現の否定先読みについて

    <a href="http://example.com/aaaa/hogehoge1.jpg" target="_blank"><img src="http://example.com/aaaa/hogehoge1.jpg" width="100" alt="huge1"></a><br />hogehoge<br /><a href="http://example.com/bbbb/hogehoge2.jpg" target="_blank"> <img src="http://example.com/bbbb/hogehoge2.jpg" alt="huge2"></a> こういうHTMLがあるとします。改行はなく1行です。 このHTMLから正規表現で 『width="100"がついていない<img>タグ』 のsrc=""までを抜き出して置換したいのです。 期待する結果は <img src="http://example.com/hage/hogehoge2.jpg" です。 そこで /<img src="http:\/\/.*?.jpg"\s(?!width)/ というパターンを試しましたが、.*?の最短一致が思った通りにいかず <img src="http://example.com/aaaa/hogehoge1.jpg" width="100" alt="huge1"></a><br />hogehoge<br /><a href="http://example.com/bbbb/hogehoge2.jpg" と、1つ目の<img>が入ってしまい、2つ目の<a>タグまで抜き出されてしまいます。 これをうまくwidth="\d+"と入っていない<img>タグのみに適用させる方法はないでしょうか? どなたかよろしくおねがいいたします。

    • ベストアンサー
    • PHP
  • [php][正規表現]タグ以外を削除したい

    いつもお世話になっております。 PHP環境にて、ある文字列において、preg_replaceなどを使い正規表現を用いてタグ以外を削除したい場合、どのように記述すれば宜しいのでしょうか。 例えば、 ――――――――――――――――― これは画像です。<img src="http://example.com/img/example.jpg"> これはテキストリンクです。<a href="http://example.com">exampleへのリンク</a> これは画像リンクです。<a href="http://example.com"><img src="http://example.com/img/example.jpg"></a> これはYoutubeの埋め込み動画です。<iframe width="420" height="315" src="http://www.youtube.com/embed/EXAMPLE" frameborder="0" allowfullscreen></iframe> ――――――――――――――――― このような記述があった場合、imgタグ、aタグ、Youtube以外のすべての通常テキストを削除したいのです。 ↓タグ以外のテキスト削除後↓ ――――――――――――――――― <img src="http://example.com/img/example.jpg"> <a href="http://example.com">exampleへのリンク</a> <a href="http://example.com"><img src="http://example.com/img/example.jpg"></a> <iframe width="420" height="315" src="http://www.youtube.com/embed/EXAMPLE" frameborder="0" allowfullscreen></iframe> ――――――――――――――――― 最初<このカッコ>に囲まれているもの以外を削除しようと思ったのですが、そうするとaタグの間のテキスト(「exampleへのリンク」の部分)も一緒に削除されてしまいました。 こちらを実現するにはどのように行えば良いか、アドバイスいただけますと嬉しいです。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 戻り読みの代わりとなる正規表現について

    正規表現を使いたいのですが、 javascriptでは戻り読み表現が使えないと知って困っています・・・ <a href="http://abc.com/"><img src="http://image.abc.com/def.jpg"></a> <a href="http://hogehoge.com/"><img src="http://hogehoge.com/hoge.jpg"></a> <a href="http://123.com/"><img src="http://456.com/789.jpg"></a> <a href="http://momomo.com/"><img src="http://lelele.com/momo.jpg"></a> 上記のソースから http://image.abc.com/def.jpg http://hogehoge.com/hoge.jpg http://456.com/789.jpg http://lelele.com/momo.jpg だけをマッチさせたいです。 (画像のパスだけをマッチさせたい) URLは今後も増える可能性があり、サイト名、文字数、画像名などもバラバラです。 うまくマッチさせる方法はありますでしょうか。 詳しい方いらっしゃいましたらよろしくお願いします!

  • 相対URLによるリダイレクト

    Locationヘッダに転送先のURLを指定する際に、相対URLをフルパスで指定すると内部リダイレクトになりますが、絶対URLを指定せずにブラウザにリダイレクトさせる方法はないでしょうか。 具体的にはこうです。 URL http://www.xxx.com/dir/from.cgi という位置にスクリプトがあるとして、ドキュメントルートにある「to.html」にリダイレクトさせたい場合、 Location: http://www.xxx.com/to.html と出力するのではなく、 Location: /to.html と出力すると、内部リダイレクトによってブラウザに返されることなく、つまりブラウザの「アドレス」欄はhttp://www.xxx.com/dir/from.cgiのまま「to.html」の内容が表示されるわけですが、そうではなく前者のように動作させたいのです(ブラウザに返してリダイレクトさせたい)。 目的は、ドメインなど絶対URLが変更になっても汎用的にスクリプトを移行できるようにしたい(絶対URLを書かなくて良いようにしたい)のですが、内部リダイレクトでは表示されるHTMLの内容によって、たとえば<img src="./image.gif">など相対パス指定の参照が正しく表示されないためです。 どうぞよろしくお願いいたします。

    • 締切済み
    • CGI
  • .htaccessで動的URLを静的化

    動的URLを静的化したいと考えています。 ネットで調べるとよくあるサンプルは RewriteRule ^/dir/([0-9A-Za-z]+)/([0-9A-Za-z]+)$ /dir/index.php?a=$1&b=$2 という風に「静的なURLにアクセスして、内部ではパラメータ付きのURLでの処理をさせる」 というパターンが多いのですが、私がやりたいのは逆で「動的URLにアクセスがあれば静的URLにリダイレクトをさせる」というものです。 理由は、 ・すでにサイトがある程度できあがっていて、既存のURLもある程度Googleにインデックスされている ・パラメータの組み合わせパターンが色々あるため上記のようなルールで対応できない などです。 そこで http://xxx.com/dir/index.php?a=01&b=02 や http://xxx.com/dir/index.php?b=02&c=03&x=999 といった動的URLを http://xxx.com/dir/a-01/b-02/ http://xxx.com/dir/b-02/c-03/x-999/ RewriteRuleを使ってこのような形で一旦301リダイレクトさせ、これをPHPの内部処理でパラメータ付きURLに戻すことによって既存のロジックを生かしたままURLを静的化できないかと考えています。 RewriteRuleの記述を色々書き換えて試してみたのですが、どうしてもやりたいようなURLの変換ができません。 どのように記述すればよいか、ご教授下さい。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ビルダー6 (サイトの設定・ルート・相対パス、絶対パスについて)

    ビルダー6を使ってます。 まず、例えば、 d:\homepage\ をルートにして、 d:\homepage\index.html d:\homepage\contents1\page1.html d:\homepage\image\image1.jpg って感じでファイルを作ったとき、page1.htmlで、 <img src="../image/image1.jpg"> とか<a href="../index.html">と相対パスで指定すると、ちゃんとプレビューできるのですが、 <img src="/image/image1.jpg"> とか<a href="/index.html">と絶対パスで指定すると、 ルートが、d:\ になってしまっていてプレビューできません。 d:\homepage\をルートに設定するには、どうすればいいでしょうか? サイトの設定には、d:\homepage\ を設定してるんですが上手くいきません。

  • HTMLタグ一括編集

    <a href="URL.***"><img src="URL.***"></a> 上記のタグの場合、***の部分だけをフォルダから一括で連番指定出来るソフトを探しています。 例えば <a href="URL.001.jpg"><img src="URL.001.jpg"></a> ・ ・ ・ <a href="URL.054.jpg"><img src="URL.054.jpg"></a> という風にタグに中に一括で001.jpg~054.jpgだけを入れ替えるソフトです。 よろしくお願いします。

  • これは相対URLなんですか?

    HTMLを少しかじっている者です。 仕事の関係で、とあるサイトのデータをローカル上に落として、ローカル上で動くようにしているのですが・・・・ サイトのソースを見た所、画像のファイル名のURLの書き方が以下のようになっています。 <img src="/image/gazou.gif"> 私は以下のような書き方しか知らないのですが、 <img src="gazou.gif"> <img src="image/gazou.gif"> <img src="../image/gazou.gif"> <img src="/image/gazou.gif">この書き方も相対パスの書き方なんですか? 本当に、少しだけHTMLをかじっているだけなので、もしかしたら基本的な事なのかも知れませんが、みなさまどうか、教えてください。

    • ベストアンサー
    • HTML
  • URLの.html省略について

    現在、サイトを制作しています。 URLについて教えて下さい。 作成ソフト:iWeb サーバー:lolipop ドメインはムームーで取得しました。 http://www.example.com/A.html を「html」を省いて http://www.example.com/A と表示させたいと思っています。 indexのページは検索サイトなどを見て、ルートディレクトリ配下に .htaccessファイルを置き、.htmlを消す事に成功したのですが、 それ以外のページで消す事が出来ません。 どういった方法で消す事が出来るのでしょうか。 _______________ 元々は、全てのページを http://www.example.com で表示したかったのですが、階層についての記述等を読んで試してみてもうまくいかないのであきらめました。。

    • ベストアンサー
    • CSS