web-dev-qa-db-ja.com

PHP-URLでhttpをhttpsに置き換えます

ユーザーがHTMLフォームのボックスをチェックした後、HTTPの後にsを追加する方法を理解しようとしています。

私のPHPには、

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

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

つまり、基本的には、ユーザーが「https」という名前のボックスをオンにすると、$ urlのhttpにsを追加して https://google.com にします。

私はPHPに関する知識がほとんどありません。そして、これを行う方法を誰かが私に説明できれば、これは本当に役に立ちます!ありがとう。

18
Kevin Jung
$url = preg_replace("/^http:/i", "https:", $url);
61
Jakub Hampl
$url = str_replace( 'http://', 'https://', $url );
11
tivnet

一方通行:

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

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

$url = sprintf($url, $protocol);
2
Felix Kling

他のURLを含むURLを置き換えないソリューション、例えば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'] ));
}
1
FaZ

ユーザーがチェックボックスをオンにした後でこれを実行するページ数はわかりませんが、1つの答えはJavaScriptと base タグです。

baseタグを使用すると、相対URLが解決される対象となる別のOriginを強制できます。

私はそれをフォームで使用していて、ユーザーがチェックボックスをオンにすると、フォームに合計が表示され、他のすべてのページはhttpsサイトから表示されるので、どこでも相対URLを使用できます。ユーザーがサイトフォームまたはhttpに変更したい場合は、別のbaseタグを挿入するだけです。

1
vbence

大文字と小文字を区別しない場合は、 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>
1
NaxBuda