2011-06-21 19 views
-2
$str=<<<EOT 
<img src="./img/upload_20571053.jpg" /><span>some word</span><div>some comtent</div> 
EOT; 

imgタグを削除するにはpreg_match_allまたは他の方法ですか?ありがとう。preg_match_all imgタグを削除するには?

echo <span>some word</span><div>some comtent</div> // $strのように、他のhtmlタグでもかまいません。imgを削除してください。

+0

可能な重複:http://stackoverflow.com/questions/1107194/php-remove-img-tag- from-string – Jeroen

+1

ブラックリスト(禁止を削除)を使用するのではなく、ホワイトリストを使用しないでください(許可のみ)。代わりに適切なHTMLサニタイザを使用してください。 – Gumbo

+0

@Jerenen Offerijns:悪いアドバイス。 [Karo96の答え](http://stackoverflow.com/questions/6426139/preg-match-all-how-to-remove-img-tag/6426182#6426182)に私のコメントを参照してください。 – Gumbo

答えて

1
$str = preg_replace('#<img[^>]*>#i', '', $str); 
1
preg_replace("#\<img src\=\"(.+)\"(.+)\/\>#iU", NULL, $str); 
echo $str; 

+0

なぜあなたは '<'、 '='、 '' '' '' '' '' ''をエスケープしますか? – Fluffy

+2

' src = "foo" /> '? – Gumbo

0

おそらくあなたはpreg_replaceが必要です。それは次のようになります。$str = preg_replace('#<img.+?>#is', '', $str)、任意の非自明なHTMLの処理のために使用すると、XMLパーサーを使用しなければならないことに留意すべきであるが、例えばKaro96 @に加えてDOMDocument

1

を使用して、私はより幅広い行くだろう。

/<img[^>]*>/i 

そして:

$re = '/<img[^>]*>/i'; 
$str = preg_replace($re,'',$str); 

demo

これはまた、htmlが適切にフォーマットされていることを前提としています。また、これは一般的な規則を無視して、ではなくを正規表現で解析しますが、あなたに答えるために私はそれを含めています。

-1

正規表現を使用しないでください。期間。これはいない、正確に解析していると、それは些細なことかもしれないが、rexeg年代はDOMのために作られていません。

RegEx match open tags except XHTML self-contained tags

ただ、例えばDOMDOCUMENTを使用しています。

+0

誰かが私の答えにどのように反対するか分かりません。Downvoter、あなたは間違っている:) – hoppa

0
$noimg = preg_replace('/<img[^>]*>/','',$str); 

このトリックを行う必要があります。

2

多くの人が言っているように、これを正規表現で行うべきではありません。イメージタグを置き換えることを見てきた例のほとんどは素朴で、あらゆる状況でうまくいかないでしょう。すべてのことを考慮に入れる正規表現(あなたが最初によく整形されたXHTMLを持っていると仮定)は、非常に長く、非常に複雑で、後で理解したり編集したりするのが難しいでしょう。そして、それが正しく動作すると思っても、その可能性はありません。実際には、(X)HTMLを解析するために特別に作られたパーサを使用するべきです。ここで

は、PHPのDOM拡張機能を使用して、正規表現せずにそれを正しく行うには方法は次のとおりです。

// add a root node to the XHTML and load it 
$doc = new DOMDocument; 
$doc->loadXML('<root>'.$str.'</root>'); 
// create a xpath query to find and delete all img elements 
$xpath = new DOMXPath($doc); 
foreach ($xpath->query('//img') as $node) { 
     $node->parentNode->removeChild($node); 
} 
// save the result 
$str = $doc->saveXML($doc->documentElement); 
// remove the root node 
$str = substr($str, strlen('<root>'), -strlen('</root>')); 
関連する問題