2012-04-30 23 views
3

に変更してください。src属性が絶対URLである場合は、すべてのHTML文字列を調べて<img>タグをすべて変更する必要があります。だから、この:Regex to <img>相対URLを絶対アドレス

<img src="http://sitename.com/path/puppies.jpg"> 

そのsrc属性がすでに絶対である<img>タグを無視して:

<img src="puppies.jpg"> 

になる必要があります。

私はPHPを使用しており、preg_replace()でこれを実行する必要があると想定しています。助けて!ありがとう!

+3

[Javascript:REGEXをすべての絶対URLを絶対値に変更する]の可能な複製(http://stackoverflow.com/questions/7544550/javascript-regex-to-change-all-relative-urls-to-absolute) –

+0

それはJavaScript用ですが、原則は同じです。 –

+0

HTMLの処理にpregの代わりにDomDocumentクラスを使用することを検討してください。 –

答えて

7

これはではありません。正規表現のジョブです。これはXML/DOMパーサの仕事です。

私はDOMDocumentにショットを付けます。

$DOM = new DOMDocument; 
$DOM->loadHTML($html); 

$imgs = $DOM->getElementsByTagName('img'); 
foreach($imgs as $img){ 
    $src = $img->getAttribute('src'); 
    if(strpos($src, 'http://sitename.com/path/') !== 0){ 
     $img->setAttribute('src', "http://sitename.com/path/$src"); 
    } 
} 

$html = $DOM->saveHTML(); 
+1

私はupvotedしましたが、OPごとに既に絶対的な 'src'属性のチェックも必要です。 – Mathletics

+0

@Mathletics:ああ、気づいていない、それを追加することができます: - P –

+1

+1、xpathの代わりにgetElementsByTagNameを使用します。 –

-1

これは、正規表現のための仕事ではありません。これは、XML/DOM パーサーの仕事です。

いいえ、そうではありません。あなただけの各src属性に接頭辞を追加したい場合は、単純な文字列関数を使用するのが最善だとさえ、XML、正規表現またはDOM解析について考えていない...

$str = str_replace('<img src="', '<img src="http://prefix', $str); 

あなたは(すでに絶対間違ったリンクをクリーンアップすることができます後で

$str = str_replace('<img src="http://prefixhttp://', '<img src="http://', $str); 

あなたがそれを避けることができるなら、regexp/domであなたのコードを爆破しないでください。

+0

私のHTMLが ''だったらどうなりますか? –

+1

このコードでは、相対URLを確認しますか? –

+0

@Rocket申し訳ありませんが、彼は彼のHTMLが '' – sbstjn