我正在尝试删除任何用户插入的图像标签,同时允许我自己的图像图标。我有这个
$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,'<img',$stringstart)){
if ($stringend = strpos($post,'>',$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';
}
}
使用<
和>
,因为我使用contenteditable=true的div进行用户输入。这也可以用于文本区域,只需将<
和>
分别替换为<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"/>
希望这是有用的。