PHP - 用URL中的https替换http

时间:2011-03-13 12:16:23

标签: php html checkbox

我试图找出如何在用户检查html表单中的框后在HTTP之后添加s。

我有我的PHP,

$url = 'http://google.com';

if(!isset($_POST['https'])) { 
  //something here
}

所以基本上,当用户选中名为=“https”的复选框时,我想将s添加到$ url的http中,使其成为https://google.com

我对PHP知之甚少,如果有人能向我解释如何去做,这将非常有用!感谢。

7 个答案:

答案 0 :(得分:60)

$url = preg_replace("/^http:/i", "https:", $url);

答案 1 :(得分:11)

$url = str_replace( 'http://', 'https://', $url );

答案 2 :(得分:2)

一种方式:

$url = '%s//google.com';
$protocol = 'http:';

if(!isset($_POST['https'])) { 
    $protocol = 'https:';
}

$url = sprintf($url, $protocol);

答案 3 :(得分:1)

我不知道您希望在用户选中此框之前发生了多少页面,但一个答案是JavaScript和base标记。

使用base标记,您可以强制使用不同的来源,即可以解析相对网址的内容。

我在表单中使用它,并且用户勾选复选框,它们总结表单,所有其他页面将从 https 站点查看,因此您可以在任何地方使用相对URL,只需在用户想要更改网站表单或http(s)时插入不同的base标记。

答案 4 :(得分:1)

不替换包含其他网址的网址的解决方案,例如 http://foo.com/redirect-to/http://newfoo.com

$desiredScheme = "http"; // convert to this scheme;
$parsedRedirectUri = parse_url($myCurrentUrl);
if($parsedRedirectUri['scheme'] !== $desiredScheme) {
    $myCurrentUrl= substr_replace($myCurrentUrl, $desiredScheme, 0, strlen( $parsedRedirectUri['scheme'] ));
}

答案 5 :(得分:1)

如果您不区分大小写,请使用str_ireplace函数。

示例:

$url = str_ireplace( 'http://', 'https://', $url );

或者,如果您要替换CDN文件中的URL方案。 例:

$url = str_ireplace( 'http:', 'https:', $url );

此... (带有'https:'

<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

成为... ({'https:'已被替换)

<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

答案 6 :(得分:-1)

$count = 1;
$url = str_replace("http://", "https://", $url, $count);

注意:直接传递1将导致致命错误(致命错误:只能通过引用传递变量),因此您必须通过引用传递最后一个参数。