PHP strip_tags():除去某个域中的所有图像?

时间:2014-09-28 15:33:30

标签: php html 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');

但我可以告诉它不要删除具有属性" source"的IMG标签。来自" http://i.imgur.com/ ....."例如?

我不想让用户在我的服务器上上传图片,因为我不想使用那么多的带宽,但我想让他们选择仍然添加来自imgur.com的图片(哪些条带)自动EXIF信息)。我也不知道该做什么是有大量的输入框,用户可以在每个输入框中输入一个链接,在我看来这看起来不太好。

这就是为什么我问是否有可能以某种方式以编程方式控制它,可能是正则表达式?

非常感谢你的时间。

1 个答案:

答案 0 :(得分:0)

实际上,使用strip_tags函数不是正确的方法,因为如果您的用户想要编写任何看起来像HTML的东西,您只需将其剪掉。不太友好,对吧? :)

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

根据你的问题,你可以做下一步:

  1. 使用Regexp将所有i.imgur.com/*图片替换为[IMG=*]
  2. 之类的内容
  3. 然后将htmlentities应用于用户内容。
  4. 渲染内容时,只需再次使用Regexp将[IMG=*]代码恢复为img代码。
  5. 我对Regexp不是很熟悉,但我写的是工作模式:

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