2011-08-17 16 views
1

タグの画像がいくつかあるHTML文書があります。私は配列、値で定義された異なるものを持つ各img sources(src)を変更したいと思います。PHP Regex正確なURL一致、変更img src

私は、次のコードを実行すると、私は私が正しくURL文字列をエスケープするにはどうすればよい

 
Warning: preg_replace(): Unknown modifier '/' in /var/www/test.php on line 9 
Warning: preg_replace(): Unknown modifier '/' in /var/www/test.php on line 9 

を取得しますか?

<?php 
$body = "<img src=http://www.google.com/img1.jpg><br>" 
     + "<img width=300 src=http://www.bbc.co.uk/img1.jpg>"; 

$changes = array(); 
$changes[] = array('from' => 'http://www.google.com/img1.jpg', 
        'to' => 'http://cnn.com/image2.jpg'); 
$changes[] = array('from' => 'http://www.bbc.co.uk/img1.jpg', 
        'to' => 'http://www.foo.bar.com/image2.jpg'); 

foreach ($changes as $change){ 
    $body = preg_replace('/<(img.*src)="'.$change['from'].'".*\/?>/', 
         '<\1="'.$change['to'].'">', $body) 
      . PHP_EOL; 
} 
?> 
+0

/を制御文字ではなく文字として確実にピックアップするために、/の前に\を追加すること。 –

+0

"from"テキストにスラッシュ( '/')があります。エスケープする必要があります。 –

答えて

1

これを試してみてください:

http://php.net/manual/en/function.urlencode.phpをURLをエンコードします。あなただけの$ bodyの文字列の一部を置き換えるしようとしているよう

しかし、それが見えますので、私はあなたの正規表現の代わりに

http://php.net/manual/en/function.str-replace.php

を使用すると思います。

<?php 
$body = "<img src=http://www.google.com/img1.jpg><br><img width=300 src=http://www.bbc.co.uk/img1.jpg>"; 

$changes = array(); 
$changes[] = array('from' => 'http://www.google.com/img1.jpg', 'to'=> 'http://cnn.com/image2.jpg'); 
$changes[] = array('from' => 'http://www.bbc.co.uk/img1.jpg', 'to' => 'http://www.foo.bar.com/image2.jpg'); 

foreach ($changes as $change){ 
$body = str_replace($change['from'],$change['to'],$body); 
} 
?> 
関連する問題