2014-09-28 42 views
0

我想知道是否有可能从用户提交的表单中除去来自某个域的标记中的所有标记。PHP strip_tags():去除某个域中的所有图像吗?

我有一个表格,主要是一个“关于我”字段,用户可以分享一些关于他/她自己的信息。插入使用这个我目前剥离和MySQL的固定数据:

$data = trim(htmlentities(strip_tags((string)$_POST['f_ab_me']))); 
$data = mysqli_real_escape_string($db, $data); 

现在我知道用strip_tags可以允许特定的标签的可能性,通过使用:

strip_tags($data, 'img'); 

但我不知它告诉例如,不要从“http://i.imgur.com/ .....”中删除具有属性“源”的IMG标签吗?

我不希望允许用户在我的服务器上传图片,因为我不想使用那么多的带宽,但是我想给他们选择仍然添加来自imgur.com的图像(它自动剥离EXIF信息)。我也不会做什么是有大量的输入框,用户可以在每个输入框中输入链接,在我看来,这看起来不会很好。

这就是为什么我问是否有可能通过程序控制它,也许用正则表达式?

非常感谢您的时间。

+1

你不能带标签的....你可以告诉它什么剥去标签或离开,但不是基于这些标签的属性 – 2014-09-28 15:35:39

+0

感谢您的快速回复@MarkBaker,但你可以告诉我怎么做到这一点?谢谢! – JDW 2014-09-28 15:36:42

+0

使用strip_tags去除除img标签之外的所有标签,然后您需要一个正则表达式或使用dom去除所有不需要的图像 – 2014-09-28 15:56:02

回答

0

其实,使用strip_tags函数不是一种正确的方法,因为如果你的用户想写任何看起来像HTML一样的东西,你只需要把它切掉。不太友善,是吧? :)

使用htmlentities就足以避免HTML在用户输入的内容中注入。

至于你的问题,你可以做下一个:

  1. 使用正则表达式替换所有i.imgur.com/*图像像[IMG=*]
  2. 然后申请htmlentities用户的内容。
  3. 当渲染内容时,只需再次使用Regexp将[IMG=*]代码变回img标记。

我不是很熟悉的正则表达式,但有工作模式我写道:

echo preg_replace("#<img (.*?)src=(\"|\')http(s)?://i.imgur.com(.*?)(\"|\')#U", "[IMG=http://i.imgur.com$4]", $content); 
+1

非常感谢@Daniilicious!我明白,这是一个开始的好地方,我现在就去看看。 – JDW 2014-09-28 16:15:41

+0

嘿,快速的问题,这RegExpression如何工作在regexr,http://regexr.com/39j6h,但不是当我使用时: preg_replace(“/ /”,“”,$ _POST ['f_ab_me']); 谢谢! – JDW 2014-09-28 18:17:27

+0

@ user3751393正如我在regexr上看到的,你的exp不起作用,删除?!在i.imgur.com使它在Regexr和PHP上运行之前 – Danny 2014-09-28 19:04:25