Php 没有指定http://或https://时如何获取方案?

Php 没有指定http://或https://时如何获取方案?,php,http,url,https,Php,Http,Url,Https,我希望用户能够在他们的公司设置对话框中输入他们的公司网站URL,但我需要验证这一点。除了典型的消毒功能外,我还想检查URL方案是否为http://或https://,而不假设用户已经输入了它 我的函数已经解析了输入的url以检测带有正则表达式的方案,但我希望(理想情况下)从服务器ala文件中检查url以获取内容或解析url并获取方案,但我不知道该怎么做。看一看。该方案将在数组的scheme元素中返回 编辑1 部分url也被接受,parse_url()尽最大努力正确解析它们 如果URL中不存在方案

我希望用户能够在他们的公司设置对话框中输入他们的公司网站URL,但我需要验证这一点。除了典型的消毒功能外,我还想检查URL方案是否为
http://
https://
,而不假设用户已经输入了它

我的函数已经解析了输入的url以检测带有正则表达式的方案,但我希望(理想情况下)从服务器ala文件中检查url以获取内容或解析url并获取方案,但我不知道该怎么做。

看一看。该方案将在数组的
scheme
元素中返回

编辑1

部分url也被接受,
parse_url()
尽最大努力正确解析它们

如果URL中不存在方案,则
scheme
元素将丢失

编辑2

正如@BenediktOlek所说,您可以使用cURL查询服务器:

$curl = curl_init();
curl_setopt_array(
    $curl,
    array(
        CURLOPT_URL            => 'http://www.example.com/',
        CURLOPT_HEADER         => TRUE,  // Output the response headers
        CURLOPT_RETURNTRANSFER => TRUE,  // Return output as a string
        CURLOPT_NOBODY         => TRUE   // Use request method "HEAD"
    )
);
$curlData = curl_exec($curl);
curl_close($curl);
如果服务器需要HTTPS连接,并且配置正确,那么它应该返回一个带有HTTPS URL的
位置:
头。

使用参数
PHP\u URL\u方案,如下所示:

$scheme = parse_url( $url, PHP_URL_SCHEME);
if( !in_array( $scheme, array( 'http', 'https'))){
  // Wrong URL
}
// Good URL
评论后:
您可以使用
cURL
模块查询服务器。但是我想假设http是安全的。如果不允许http,则正确配置的Web服务器应重定向

.

或者这有帮助

    NSRange range = [urlName rangeOfString:@"http://"];
//NSLog(@"found or not found");
if (range.location != NSNotFound)
{
    //NSLog(@"range is found");
    //range.location is start of substring
    //range.length is length of substring
} else
{
    //NSLog(@"range is not found");
    //urlName = @"http://"  urlName;
    //NSString *string = [NSString stringWithFormat:@"%@%@", @"Hello", @"World"];
    urlName = [NSString stringWithFormat:@"%@%@", @"http://",urlName];
    //NSLog(@"NEW urlName......%@", urlName);
}

不,我已经查过了。例如,如果您碰巧运行了
parse_url(“www.someurl.com”)
在返回数组中唯一得到的是
路径
组件,但是没有返回任何方案:如果字符串中没有方案,那么最好做的就是假设并将其设置为默认值。我喜欢cURL方法。我要测试一下。谢谢!:)返回的信息太多,但这是一种不错的方法。我想我会使用
no scheme->http://
规则,但是感谢这两个规则对cURL的建议:)@JulioMecaHansen您可以执行
explode(“\n”,$curlData)
将cURL的响应拆分为一个数组,然后使用
foreach()
循环在该数组中查找
位置:
头。然后
explode(':',$strHeader)
提取URL,然后
parse_URL()
获取方案。这有什么关系?假设http。如果是https,服务器将重定向你。不,它不工作。此外,我尝试了几种组合,
www.someurl.com
http://www.google.com
https://www.google.com
,其中
false
http
https
是我得到的答案,但这就是我现在想要的。我的意思是,用户可以插入一个格式错误的URL,但我仍然需要检查它是否处于安全或非安全连接下,只需使用格式正确的URL更新他们的数据库记录即可。我的目标是不是太高了?
    NSRange range = [urlName rangeOfString:@"http://"];
//NSLog(@"found or not found");
if (range.location != NSNotFound)
{
    //NSLog(@"range is found");
    //range.location is start of substring
    //range.length is length of substring
} else
{
    //NSLog(@"range is not found");
    //urlName = @"http://"  urlName;
    //NSString *string = [NSString stringWithFormat:@"%@%@", @"Hello", @"World"];
    urlName = [NSString stringWithFormat:@"%@%@", @"http://",urlName];
    //NSLog(@"NEW urlName......%@", urlName);
}