使用PHP删除用户插入的图像标记


Removing user inserted image tags with PHP

我正在尝试删除任何用户插入的图像标签,同时允许我自己的图像图标。我有这个

$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';
    }
}

我想把这个退回

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

我似乎在一个strpos函数上遇到了一个错误,但不知道为什么。

更新:谢谢你。这个答案要优雅得多。我终于用完成了代码

$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;&gt;,因为我使用contenteditable=true的div进行用户输入。这也可以用于文本区域,只需将&lt;&gt;分别替换为<img>,并更改

$strlength = $stringend - $stringstart +4;

$strlength = $stringend - $stringstart +1;

谢谢你抽出时间。

您应该为作业使用HTML解析器,例如DOMDocument

以下示例代码将您的html片段放入id为post的div中,以便对其进行识别:

$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加载到其中

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

下一步是选择要删除的所有图像。这是通过xpath完成的。然后,将使用$container作为引用来查询xpatch表达式:

$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);
}

最后,需要通过从$container:中取出所有内容来获取更改后的HTML

$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"/>

希望这是有用的。