2016-12-16 9 views
2

私はHTMLタグを持つ記事を持っています。それは3/5イメージの長い記事です。今私はすべての画像を更新したいと考えていますsrc属性。例:Pregコールバックを使用してイメージsrcを置き換えます。

<img class="aligncenter" style="display: block;margin-left:auto;margin-right:auto;" src="http://img.zszywka.com/0/0269/w_0980/moj-swiat/muza-2013-najnowsze-eska-hity-2013-.jpg" width="642" /> 

私はいくつかの変更と、次の更新srcを行い、このURLを取りたい:

画像htmlタグは次のようになります。だから私は変更を操作する必要が

<img class="aligncenter" style="display: block;margin-left:auto;margin-right:auto;" src="http://EXMAPLE.COM/0/0269/w_0980/moj-swiat/muza-2013-najnowsze-eska-hity-2013-.jpg" width="642" /> 

:その後(そのスクリプトがすべての画像にSRCを変更する必要があります)次の画像に移動し、再びそれを行う

最終imgタグは次のようになります。私はpreg_replace_callbackを使用してみたが、私はそれに問題がある:これは動作しますしない

// change image src 


$finalContent = preg_replace_callback('/' . preg_quote('src="(*.?)"') . '/', 
function() use ($variable_with_changes){ return $variable_with_changes; }, $variable_with_article_content); 

echo $finalContent; 

、私は画像のドメインを更新し、パスを保つことができる方法のアイデアを持っていません。

+0

こんにちは、このようにしてください: –

答えて

3

正規表現を使用せずに、HTMLとしてparsing HTMLにする必要があります。

$doc = new DOMDocument(); 
$doc->loadHTML('<html><body><img class="aligncenter" style="display: block;margin-left:auto;margin-right:auto;" src="http://img.zszywka.com/0/0269/w_0980/moj-swiat/muza-2013-najnowsze-eska-hity-2013-.jpg" width="642" /></body></html>'); 
$images = $doc->getElementsByTagName('img'); 
foreach ($images as $img) { 
    $url = $img->getAttribute('src'); 
    // do whatever you need to with $url 
    $url = str_replace('img.zszywka.com', 'example.com', $url); 
    $img->setAttribute('src', $url); 
} 
echo $doc->saveHTML(); 
1

解析答えは良いですが、あなたの正規表現/ preg_replace_callbackが失敗した理由のあなたの質問に答えるために...

  1. preg_quoteは、すべての特殊正規表現文字をエスケープので、あなたの正規表現には使用しないでください。変数や未知の文字を正規表現に渡していたら、それを使うでしょう。

  2. *.が無効です。*は、前の文字/グループの0以上を意味する量指定子です。 .*はあなたが望むものです。つまり、改行を除いてゼロ以上の文字を意味します。

  3. あなたの見つかったマッチで何もしていないので、それらを関数に渡す必要があります。 function($match)

  4. あなたは決してあなたの機能にドメイン名の入れ替えをしません。これにはstr_replaceを使用できます。

PHP例:

$variable_with_article_content = '<img class="aligncenter" style="display: block;margin-left:auto;margin-right:auto;" src="http://img.zszywka.com/0/0269/w_0980/moj-swiat/muza-2013-najnowsze-eska-hity-2013-.jpg" width="642" />'; 
$finalContent = preg_replace_callback('/' . 'src="(.*?)"' . '/', 
function($match) { return 'src="' . str_replace('img.zszywka.com', 'EXMAPLE.COM', $match[1]) . '"'; }, $variable_with_article_content); 

echo $finalContent; 

デモ:https://eval.in/699201

も注意してください、あなたの正規表現は、あなたがイメージのドメインを交換するという要件がありません。

+0

ありがとう! :)もうまく動作します –

+0

miken32の答えを見てください。これはより良いアプローチです。これは "正規表現/コールバックの問題点"です – chris85

-1

解決策が見つかりました。 :)

function getURL($matches) { 
    global $rootURL; 
    return $matches[1] . $rootURL . "?type=image&URL=" . base64_encode($matches['2']); 
} 

$contents = preg_replace_callback("/(<img[^>]*src *= *[\"']?)([^\"']*)/i", getURL, $contents); 

ありがとうございました!

関連する問題