PHP - 在 URL 中用 https 替换 http

Posted

技术标签:

【中文标题】PHP - 在 URL 中用 https 替换 http【英文标题】:PHP - replace http with https in URL 【发布时间】:2011-07-14 10:34:55 【问题描述】:

一旦用户选中 html 表单中的框,我正在尝试弄清楚如何在 HTTP 之后添加 s。

我的 php 中有,

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

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

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

我对 PHP 知之甚少,如果有人可以向我解释如何进行此操作,这将非常有帮助!谢谢。

【问题讨论】:

【参考方案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>

【讨论】:

【参考方案2】:

不替换包含其他网址的网址的解决方案,例如 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'] ));

【讨论】:

【参考方案3】:
$url = preg_replace("/^http:/i", "https:", $url);

【讨论】:

很好的解决方案,但它更适合大小写敏感:$url = preg_replace("/^http:/i", "https:", $url); 我测试了这个解决方案,不幸的是这不起作用,我用“str_replace”尝试了下一个解决方案并得到了结果。 str_replace 对我不起作用,但原来的起作用了。也非常感谢这个伟大的解决方案,通过即时自定义的 wordpress 主题解决了一个巨大的问题,否则会强制混合内容通过 SSL 并中断 SSL 连接。【参考方案4】:
$count = 1;
$url = str_replace("http://", "https://", $url, $count);

注意:直接传1会抛出致命错误(致命错误:只能通过引用传递变量)所以必须通过引用传递最后一个参数。

【讨论】:

它会抛出一个错误,因为$count 将只包含执行的替换次数。它不是用来设置边界或任何东西的参数。【参考方案5】:
$url = str_replace( 'http://', 'https://', $url );

【讨论】:

【参考方案6】:

我不知道您希望在多少页面上发生这种情况,然后用户选中该框,但一个答案是 javascript 和 base 标记。

使用 base 标签,您可以强制使用不同的来源,即您的相对 URL-s 将被解析的对象。

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

【讨论】:

【参考方案7】:

一种方式:

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

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


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

【讨论】:

感谢代码,但我无法分解 $url,因为它正在用于需要整个 url 的先前函数中。会不会有别的办法? @usr122212:见@edorian 的回答。

以上是关于PHP - 在 URL 中用 https 替换 http的主要内容,如果未能解决你的问题,请参考以下文章

在wordpress中用data-url延迟加载替换所有src

如何在 PHP 中用单个空格正确替换多个空格?

如何在arch linux中用python 2完全替换python 3

如何在 PHP 中的变量中用空格替换制表符?

在 PHP 中用一个空格替换多个空格和换行符

如何在 C# 中用 %20 替换所有空格?