• ベストアンサー

<img src=http://にしたい

PHPでWebページのソースを取得して そのソースの中の<img>タグの src属性がもしhttp://で始まらなかった場合 取得したURLをsrc属性に加える方法はないでしょうか? 例 URL=http://www.○○.com ソース <img src="/image/01.jpg"> ↓ <img src="http://www.○○.com/image/01.jpg"> に変更したいです。 よろしくお願いします。

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

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.2

ファイルを読み書きしながら、 str_replace("src=\"/image","src=\"http://www.example.com/image",data); のようにすればいいと思います。 あるいは、imgタグだけじゃなくてaタグも含めて、urlにhttp://~を追加したいのなら、baseタグを使うことを考えても良いでしょう。 <html><head> <base href="http://www.example.com/"> </head><body> <a href="/next/page.html">つぎ</a> <img src="/image/01.jpg"> </body></html> と書くと、リンク先や画像の場所はwww.example.comになります。

montan113
質問者

お礼

取得したソースのhead部分にbaseタグを挿入することで画像を表示することができました。 迅速で的確な回答ありがとうございました。

その他の回答 (1)

  • mpx
  • ベストアンサー率71% (149/209)
回答No.1

正規表現で置換すれば所望のことはできます。 <?php $html=<<<EOD <img src="/image/01.jpg"> <img src="http://www.○○.com/image/02.jpg"> <img src="/image/03.jpg"> EOD; $ptn='|<img\s+src\s*=\s*"(/[^>]*>)|'; $replace='<img src="http://www.○○.com$1'; $html=preg_replace($ptn,$replace,$html); echo $html; ?> 但し上記例は 相対パスでのリンクまでは対応していません。 

montan113
質問者

お礼

回答していただきありがとうございました。 二方のアドバイスにより無事問題を解決することができました。 本当にありがとうございました。 また、質問する機会がありましたらよろしくお願いします。

関連するQ&A

  • <img src=

    アクセスカウンタなどで<img src="cgi-bin/●●●.cgi......">で来客者数を表示できるCGIがありますが、あのように、例えば<img src="cgi-bin/●●●.cgi" width="xx" height="yy">で表示できるCGIとタグを入れるとそのCGIに買い込んで書き込んであるURLのページを500×400の範囲内に表示できるCGIはないでしょうか? <img src="cgi-bin/●●●.cgi?url=http://www.nantoka.or.jp/tobisaki.html">といった使い方のものでもかまいません。 感覚としては、1つのHTMLページにiframeでインラインフレームを入れるのと同じ考え方なのですが、iframeタグが使えないところに、ある別ページを挿入したいのです。 100ページ以上ある商品ページに同じ内容のテーブルを入れ、テーブルの内容を更新するたびに100ページ全部書き換えるのが大変なので、何とかしたいのです。 インラインで表示できれば、1つのHTML書類を書き換えれば100ページ全部が更新されることになりますから。 その商品ページはショッピングモール内のフォームで書き込むものなので、勝手にフレームで切ったりスタイルシートを使ったりできないので、IMGタグで対応するしかありません。 お心当たりのある方はいらっしゃらないでしょうか?

    • ベストアンサー
    • CGI
  • <img src=

    いくつかの画像を表示させたいのですが・・ <img src="1番目の画像URL"border="0"><img src="2番目の画像URL"border="0"> とタグを貼ると、画像同士がピッタリくっついてしまいます、 この間隔を開ける方法? いろいろ調べていますがみつかりません・・ 普通にスペースを入れたら[_]表示になってしまいました、 間隔を開ける方法を教えて下さい。お願いします・・

    • ベストアンサー
    • HTML
  • img のソース変更

    IMGタグの画像データ(***.JPG)を変更したいときは、どうしたらいいでしょうか? 以下のサイトを参考にしましたが、いまいちよくわかりませんでした。 http://bibo-roku.net/1301/78.php <IMG SRC="AAA.JPG"> <IMG SRC="BBB.JPG"> をPHPで <IMG SRC="CCC.JPG"> に変更する方法を教えてください よろしくお願いします。

    • ベストアンサー
    • PHP
  • preg_match_allで正規表現

    preg_match_allにて、次のように<img>が連続したソースから、 ※URLは全てダミーです <img src="http://a.com/a/a.jpg"><img width="10" src='http://b.com/b/b.gif' height="10"><img width="10" height="10" src='http://c.com/c/c.png"><img src=http://d.com/d/d.jpg><img src="http://e.com/hogefuga/e.jpg"> 個々のimgタグ全体と"<img~>"、 個々のsrc="~"のURLを抽出したいのですが、下記の条件でマッチさせることはできるでしょうか? 1. imgの属性位置・有無に問わず 2. 属性のくくりが、'" のどちらでも、または有無に問わず 3. src=~内に、"hogefuga"を含まないものにだけマッチ(否定形) 次のような正規表現で試したところ、 $pattern = '/<img.*?src=(\'|")?((?(?!hogefuga).)*\.(jpg|gif|png))(\'|")?.*?>/i'; 下のようにimgタグが1行づつ並んでいる場合は上手くいったのですが、連続して並んでいる場合は個々の、"<img~>"でマッチされませんでした。 ※URLは全てダミーです <img src="http://a.com/a/a.jpg"> <img width="10" src='http://b.com/b/b.gif' height="10"> <img width="10" height="10" src='http://c.com/c/c.png"> <img src=http://d.com/d/d.jpg> <img src="http://e.com/hogefuga/e.jpg"> 最終的にはsrc="~"のURLに応じて、画像をテキストリンクへ置換する、ということをしたいのですが、正規表現がよくわからず試行錯誤しています。 このような場合はどのような正規表現を書くべきなのでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • Javaの正規表現でimgタグのaltとプレーンテキストのみを抜き出し

    Javaの正規表現でimgタグのaltとプレーンテキストのみを抜き出したいと思っています。 例えば、 <img src="image.jpg" alt="イメージ" />テキスト <img src="image.jpg" alt="イメージ" class="imgclass" />テキスト <img alt="イメージ" src="image.jpg" />テキスト は、全て「イメージテキスト」になるようにしたいのです。 imgタグが入っていない場合や、プレーンテキストの後ろにimgタグがある場合、 プレーンテキストにimgタグがはさまれている場合、imgタグが複数ある場合など 汎用的に対応したいのですがうまくできず… アドバイスいただけると助かります。

  • srcに「banner.」で始まるファイルを指定しているimgタグが消える

    急に謎の症状が発生して困っています。 何か知っている方がいたらご教示お願いします。 謎の症状が起きるスクリプトの例------------------------ echo '<div>'; echo '<a href="hoge1"><img src="img/banner.jpg"></a>'; echo '<a href="hoge2"><img src="img/banner2.gif"></a>'; echo '<a href="hoge3"><img src="banner.gif"></a>'; echo '<a href="hoge4"><img src="banner.png"></a>'; echo '<a href="hoge5"><img src="hogehoge.gif"></a>'; echo '</div>'; ------------------------------------------------------ 上記のようなスクリプトを実行した場合に、3行目の「img/banner2.gif」と6行目の「hogehoge.gif」を指定しているimgタグしか表示されません。 残りはimgタグの部分だけ綺麗さっぱりに消えてaタグの部分だけ表示されます。実行結果が下記のようになるのです。(実際には改行されませんが、見やすいように改行してます。) 実行結果--------------------------------------- <div> <a href="hoge1"></a> <a href="hoge2"><img src="img/banner2.gif"></a> <a href="hoge3"></a> <a href="hoge4"></a> <a href="hoge5"><img src="hogehoge.gif"></a> </div> ----------------------------------------------- banner.gifやimg/banner.gifは表示されるファイルと同じディレクトリの中に存在しています。 昨日ちゃんと表示されていたのを確認しました。そのときからサーバーの設定は変更していないので、何が原因なのかが分かりません。 過去に同じような症状が起こった方はいないでしょうか? PHPのエラーログを見てもエラーも警告もありませんでした。 【環境】 OS: CentOS/5 HTTPD: Apache/2.2.3 PHP: PHP/5.1.6(eAccelarator、ZendOptimizerが入ってます) ちなみに「banner」だけだとOKでした。「banner.」が付くとダメみたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • HTMLからimgのsrcのみを正規表現で抽出する

    Webサイトから画像だけをダウンロードするツールをJavaの勉強がてら作成しており、HTML内に含まれた全てのimgタグのsrc部分のみを抽出したいと考えています。 現在、正規表現を使ってHTMLからimgタグのsrcを抽出し、srcの一覧を取得するようなメソッドを作成していますが、私の実力が及ばないばかりに上手く出来ずに困っております。 以下のようなHTMLが有った場合の例を挙げます。 <html> <body> <img src="hoge.jpeg"> <img src="./hoge.jpeg"> <img src="./fuga/hoge.jpeg"> <img src="../fuga/hoge.jpeg"> <img src="http://fuga/hoge.jpeg"> </body> </html> 上記のHTMLがString型に格納されてますので、 作成した抽出用メソッドの引数に渡すと以下のようなString[]型の文字列を返す想定をしています。 [0]=hoge.jpeg [1]=./hoge.jpeg [2]=./fuga/hoge.jpeg [3]=../fuga/hoge.jpeg [4]=http://fuga/hoge.jpeg しかしながら現在、以下のような結果となり、最後の1件しか取得できていない状況です。 [0]=http://fuga/hoge.jpeg 恐らく正規表現が正しくないせいだとは思いますが、どのようにすれば取得できるのか分からず困っています。 もしこの問題についての解決策をご存じの方がおりましたら、ご教示いただけましたら幸いです。 よろしくお願いします 以下、作成中のテストソースです。 //---------------------------------------------------- import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String testHtml = "<html><body><img src=\"hoge.jpeg\"><img src=\"./hoge.jpeg\"><img src=\"./fuga/hoge.jpeg\"><img src=\"../fuga/hoge.jpeg\"><img src=\"http://fuga/hoge.jpeg\"></body></html>"; String[] res = extractImgSrc(testHtml); // 結果表示 for (int i = 0; i < res.length; i++) { System.out.println("res[" + i + "]=" + res[i]); } } // imgタグのsrcからurlを抽出 public static String[] extractImgSrc(String html) { List<String> result = new ArrayList<String>(); Pattern p = Pattern.compile("<\\s*img.*src\\s*=\\s*([\\\"'])?([^ \\\"']*)[^>]*>"); Matcher m = p.matcher(html); while (m.find()) { result.add(m.group(2)); } return result.toArray(new String[result.size()]); } }

    • ベストアンサー
    • Java
  • imgタグにPHPを仕掛けてリンク元の取得

    当方アフィリエイトプログラムを開発している者です。 アフィリエイトを起こしたいユーザーさんのページ(いわゆるサンクス画)に、imgタグで<img src="http://hoge/affi.php">を仕掛けた際、 このaffi.phpをサーバ側で取得して、どこのサイトのページでこのタグが踏まれたか、リンク元を取得したいのですが、可能なのでしょうか? いろいろ検証したのですが、リンク元が自分のサイトのURLを拾ってしまいます。 どなたかこういった事例の対処法をご存知の方がいましたら、解決方法やヒントなど教えていただけましたら助かります。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • <img src"○.jpg">の○をランダムに!

    1.jpgから30.jpgの30枚の画像はimagesという名のフォルダにあり、 それらの画像をJavaScriptで画像を1枚目からランダムにフェードインするものを作りたく、 http://asamuzak.jp/html/302を参考にして、 2枚目からランダムにフェードインすることはできました。 しかし、1枚目が必ず同じ画像が表示されてしまいます。 body内の<img src"1.jpg" id=""> の部分が表示される1枚目のようです。 1.jpgを2.jpgにすると2.jpgが最初に表示されます。 1枚目からランダムにフェードインするものを作るには、 この<img src"1.jpg" id="">を<img src"ランダムな整数.jpg" id=""> にすればいいのでは? と思いました。 自分が考えたコードは、 下記コードの場合の動作は、 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"><!-- InstanceBegin template="/Templates/index.dwt" codeOutsideHTMLIsLocked="false" --> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <title></title> <script language="JavaScript"> <!-- var n = Math.floor((Math.random() * 29))+1; //--> </script> </head> <body> <img src="../images/1.jpg" /> </body> </html> 1.jpgが毎回必ず表示されます。 ランダムな整数を取得できるJavaScriptを作り、 var n = Math.floor((Math.random() * 29))+1; その整数を上記コードの <body> <img src="../images/1.jpg" /> </body> の部分を <body> <img src="../images/n.jpg" /> </body> とvar nを入れてやれば 1~30のランダムな整数が入って ページを更新するたびに画像が変わると考えました。 <img src="../images/n.jpg" />の書き方を直せばいいと思うのですが、 どのようにしたらいいのでしょうか? よろしくお願いします。

  • MYSQLにデータが送信されない

    こんにちは PHPもDBも初心者です。 現在、(1)トップページにある画像のurlをcheck.phpに送信して、(2)DB内のimg_urlと照合し、(3)照合されたイメージにpointを1追加した後、(4)またトップページに戻るというプログラムを組もうとしてるのですが、うまくいきません。 ソースはこれです↓ ---------------------------------------------------------------------------------- index.php <?php $image = array( "img/img1.jpg", "img/img2.jpg", "img/img3.jpg", "img/img4.jpg", "img/img5.jpg", "img/img6.jpg", ); $image = $image[rand(0, count($image)-1)]; echo '<a href="./check.php?url='.$image.'"><img src="'.$image.'" alt=""></a>'; ?> ---------------------------------------------------------------------------------- check.php ---------------------------------------------------------------------------------- <?php mysql_connect('****','****','****')or die(mysql_error()); mysql_select_db('******')or die(mysql_error()); mysql_query('SET NAMES UTF-8'); $url = htmlspecialchars($_GET['url']); if( !$url == ' ') { mysql_query('UPDATE image SET point=point+1 WHERE img_url = "$url"')or die(mysql_error()); header ('Location: ./index.php'); exit(); } else { echo('画像の情報が送信されていません。'); } ?> ---------------------------------------------------------------------------------- まだまだわからないことだらけで、稚拙な内容だとは思いますが よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう