我有一个表单字段,我们允许用户发布Youtube网址(显然有很多youtube类型网址变体)
我的问题是,我们如何清理这个元素,以防止用户发布:
我读过这篇文章here
但我对如何实施Jeff Attwood给出的答案感到有些困惑。
目前我的表单元素很简单。
<div class="form-group col-lg-6 col-sm-12 underline">
<label>Add a Video from <strong>YouTube</strong></label>
<input type="text" name="video" id="choosevideo" class="form-control" tabindex="6" placeholder="YouTube Video URL">
</div>
答案 0 :(得分:3)
您不应该依赖客户端验证,因为它很容易跳过。始终在应用程序的服务器端验证。
找到适合的regex并将其添加到您的服务器验证中。如果您还想要客户端验证,可以在输入标记中添加“pattern”属性。
答案 1 :(得分:0)
因此,您可以在$_POST['video']
中获取用户数据,就像您的表单所示。
您应该从PHP的parse_url()
函数开始,然后使用parse_str()
函数。
适合您的工作示例。根据您的需求进行定制:
<?php
$parse = parse_url($_POST['video']);
if ($parse['host'] != 'www.youtube.com'){
echo 'this is not a valid url';
// return false here or something
}
// continue only if false was not returned, of course
parse_str($parse['query'], $query);
if (!isset($query['v']) || !$query['v']){
echo 'you have not provided a video id';
// return false here
}
// if false was not returned up until this point,
// you have the video ID in $query['v']
// and that is all you need I believe
// I think you can do the rest
?>
在我看来,这是最好的做法,我不明白为什么人们建议正则表达式或类似的。这种方法快速,安全,并使用内置的PHP函数,可以很好地执行操作。
根据您的用户可能输入的网址,您可能需要稍微根据需要进行调整(例如,我不知道YouTube是否有更多的域名/虚拟主机 - 这可以通过创建{{1并使用array()
等检查它。)