确保 http 出现在网址中

发布于 2024-07-18 22:18:54 字数 736 浏览 6 评论 0原文

我有人发布他们的网站地址,但发布了变体,例如:

当我链接到没有 http:// 的地址时将链接视为内部

<a href="theirsite.com">their site</a>

链接,将人们发送至以下内容:http://mysite.com/thiersite.com

我尝试过的另一个选择是链接到类似 mysite.com/?link=theirsite.com 的内容 - 这样我可以进行一些链接跟踪等,然后将人们重定向到该链接,但它有同样的问题:

//do some tracking etc here
$link =$_GET['link'];
header("Location: $link");

I have people posting their website address but variations are posted such as:

When I link to an address without http:// it takes the link as internal

<a href="theirsite.com">their site</a>

sending people to something like: http://mysite.com/thiersite.com

Another option I've tried is linking to something like mysite.com/?link=theirsite.com - This way I can do some link tracking etc then redirect people to the link but it has the same problem:

//do some tracking etc here
$link =$_GET['link'];
header("Location: $link");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

浅浅淡淡 2024-07-25 22:18:55

这里不需要使用正则表达式。 PHP 内置了 URL 验证。

过滤变量

var_dump((bool) filter_var('http://www.website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
var_dump((bool) filter_var('http://website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
var_dump((bool) filter_var('www.website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
var_dump((bool) filter_var('website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));

输出

bool(true)
bool(true)
bool(false)
bool(false)

Please do不是直接跳转到正则表达式进行验证,PHP 内置了很多方法来处理这些场景。

-马修

No need to use regular expressions here. PHP has URL validation built in.

Filter Var

var_dump((bool) filter_var('http://www.website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
var_dump((bool) filter_var('http://website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
var_dump((bool) filter_var('www.website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
var_dump((bool) filter_var('website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));

Output

bool(true)
bool(true)
bool(false)
bool(false)

Please do not jump straight to regular expressions for validation, PHP has a lot of methods built in to deal with these scenarios.

-Mathew

暗恋未遂 2024-07-25 22:18:55

默认情况下将“http://”放入字段中,然后使用类似的内容验证 URL,

if(eregi("^((http|https)://)?([[:alnum:]-])+(\.)([[:alnum:]]){2,4}([[:alnum:]/+=%&_.~?-]*)$", stripslashes(trim($_POST['link'])))){
    //link is valid
}

如果链接未验证,只需向其打印一条消息,说明“您输入的链接无效,请确保它以“http://”开头’”

put "http://" in the field by default, then validate the URL with something like

if(eregi("^((http|https)://)?([[:alnum:]-])+(\.)([[:alnum:]]){2,4}([[:alnum:]/+=%&_.~?-]*)$", stripslashes(trim($_POST['link'])))){
    //link is valid
}

if link does not validate, just print them a message saying "the link you entered is invalid, make sure it starts with 'http://'"

相守太难 2024-07-25 22:18:55

请注意,www.site.comsite.com 之间存在真正的区别,通常两者都有效,但在某些网站上,每个网站都会导致不同的路径(有些网站定义错误)例如,如果没有 www,网站将无法运行)。 所以你不能总是在输入前面加上“www”。

另请注意,请处理前置空格,以便 ' http://' 不会在前面添加额外的 http://

我的基于 Javascript Regex 的解决方案

'http://'+field.replace(/^ *http:\/\//,'')

您可以验证客户端大小,只需在表单的 onSubmit 上添加类似的代码即可。

Please note, there's a real difference between www.site.com and site.com, usually both works, but on some website each leads to a different path (some badly defined website won't work without the www for instance). So You can't always prepend 'www' to the input.

Another note, do handle prepending space, so that ' http://' would not be prepended with additional http://.

My Javascript Regex based solution

'http://'+field.replace(/^ *http:\/\//,'')

You can verify that on the client size, just put a code in similar spirit on the onSubmit of your form.

痞味浪人 2024-07-25 22:18:55

我会使用这样的东西:

$link = str_replace(array("\r", "\n"), '', trim($link));
if (!preg_match('/^https?:\/\//', $link)) {
    $link = 'http://'.$link;
}
header('Location: '.$link);

另一种方法是 parse_url 函数解析给定的 URL,查看缺少哪些部分并添加它们。

I would use something like this:

$link = str_replace(array("\r", "\n"), '', trim($link));
if (!preg_match('/^https?:\/\//', $link)) {
    $link = 'http://'.$link;
}
header('Location: '.$link);

Another way would be the parse_url function to parse the given URL, see what parts are missing and add them.

云裳 2024-07-25 22:18:55

我会提供一些验证或卫生。 使用正则表达式查看 http:// 是否以其开头。 如果没有,请抛出验证错误或将 http:// 放在开头。

I would provide some validation or sanitation. Use a regex to see if http:// starts with it. If it doesn't, either throw an validation error or put http:// at the start.

他是夢罘是命 2024-07-25 22:18:55
if not "://" in users_url:
    users_url = "http://" + users_url

...或同等语言,以您选择的语言。

if not "://" in users_url:
    users_url = "http://" + users_url

...or equivalent, in the language of your choice.

何其悲哀 2024-07-25 22:18:55

您可以使用正则表达式来测试输入

Regex exp = new Regex(
    @"http://(www\.)?([^\.]+)\.com",
    RegexOptions.IgnoreCase);

You could use regular expressions to test input

Regex exp = new Regex(
    @"http://(www\.)?([^\.]+)\.com",
    RegexOptions.IgnoreCase);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文