php
2012-01-05 14 views 1 likes 
1

自分の画像アイコンを許可している間に、ユーザが挿入した画像タグを削除しようとしています。私は、これは私がstrpos関数のいずれかにエラーを取得しているように見えるが、なぜ把握することはできませんPHPでユーザが挿入した画像タグを削除する

Here is an image to check and my icon <img src="/images/ImageLink.jpg" /> 

を返したいと思い、この

$post = 'Here is an image <img src="imgage.jpg" /> to check 
     and my icon <img src="/images/ImageLink.jpg" />'; 

$imgcheck = true; 
$stringstart = 0; 

while($imgcheck == 'true'){ 
    if($stringstart = strpos($post,'<img',$stringstart)){ 
     if ($stringend = strpos($post,'>',$stringstart)){ 
      $strlength = $stringend - $stringstart; 
      $substring = substr($post,$stringstart,$strlength); 
      if (!preg_match('/src="\/images\/ImageLink.jpg"/',$substring)){ 
       $post = str_replace($substring, "", $post); 
      } 
      else{ 
       $stringstart = $stringend; 
      } 

     } 
     else{ 
      $imgcheck = 'false'; 
     } 
    } 
    else{ 
      $imgcheck = 'false'; 
    } 

} 

を持っています。

更新:ありがとうございました。その答えははるかにエレガントです。私は最終的に

$imgcheck = true; 
$stringstart = 0; 

while($imgcheck == 'true'){ 
    if($stringstart = strpos($post,'&lt;img',$stringstart)){ 
     if ($stringend = strpos($post,'&gt;',$stringstart)){ 
      $strlength = $stringend - $stringstart +4; 
      $substring = substr($post,$stringstart,$strlength); 
      if (!preg_match('~src="\/images\/ImageLink.jpg"~',$substring)){ 
       $post = str_replace($substring, "", $post); 
      } 
      else{ 
       $stringstart = $stringend; 
      } 

     } 
     else{ 
      $imgcheck = 'false'; 
     } 
    } 
    else{ 
      $imgcheck = 'false'; 
    } 

} 
&lt;

と私は、ユーザー入力のための真=のcontentEditableとのdivを使用していますので、使用&gt;でコードを動作させるためでした。これは単に、それぞれ<img>&lt;&gt;を交換するだけでなく、

$strlength = $stringend - $stringstart +1; 

$strlength = $stringend - $stringstart +4; 

を変更することでテキストエリアのためにも使用することができ、あなたの時間をありがとうございました。

+1

'strip_tags()'メソッドを調べるほうが良いかもしれません。 – MahanGM

+0

strip_tagsは、jqueryで挿入された画像アイコンも削除します。 – buck54321

+0

あなたの質問のタイトルではっきりしてください。私はRegExに慣れていません。簡単にアイコンタグを '[MyIcon]' next 'strip_tags'のような特定のマークに置き換えて、' [MyIcon] 'をアイコンタグに置き換えることができます。それは汚いが良いトリックだ。 – MahanGM

答えて

2

ジョブのHTMLパーサーを使用する必要があります(例:DOMDocument)。

$post = 'Here is an image <img src="imgage.jpg" /> to check 
     and my icon <img src="/images/ImageLink.jpg" />'; 

$post = '<div id="post">'.$post.'</div>'; 

その後DOMDocumentがそこに作成したHTMLがロードされます。

次のコード例では、それを識別できるID postとのdivにあなたのHTMLフラグメントを配置します。さらに、コンテナdivはIDで変数として使用できます。

$doc = new DOMDocument(); 
$doc->loadHTML($post); 
$container = $doc->getElementById('post'); 

次の手順では、削除するすべての画像を選択します。これはxpathで行われます。 xpatch式は、参照として$containerで照会されます。

$xpath = new DOMXPath($doc);  
$expression = './/img[@src != "/images/ImageLink.jpg"]'; 
$nodes = $xpath->query($expression, $container); 

次のステップでは、見つかったすべての要素を反復処理し、それらを削除することです:

foreach($nodes as $node) 
{ 
    $parent = $node->parentNode; 
    $parent->removeChild($node); 
} 

最後に変更されたHTMLは、後天する必要があります$containerのうち、すべてのものを取ることによって:

$innerHTML = ''; 
foreach($container->childNodes as $child) { 
    $innerHTML .= $node->ownerDocument->saveXML($child); 
} 

今、すべてが

でありますあなたを与えるだろう
echo $innerHTML; 

Here is an image to check 
     and my icon <img src="/images/ImageLink.jpg"/> 

希望はこれが便利です。

+0

ありがとうございます。更新が掲載されました。 – buck54321

関連する問題