我试图找出如何在用户检查html表单中的框后在HTTP之后添加s。
我有我的PHP,
$url = 'http://google.com';
if(!isset($_POST['https'])) {
//something here
}
所以基本上,当用户选中名为=“https”的复选框时,我想将s添加到$ url的http中,使其成为https://google.com。
我对PHP知之甚少,如果有人能向我解释如何去做,这将非常有用!感谢。
答案 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将导致致命错误(致命错误:只能通过引用传递变量),因此您必须通过引用传递最后一个参数。