如何通过GET方法提交不含https://的URL参数?
嘿,这个需求挺常见的,我给你几个实用的方案,你可以根据自己的场景来选:
方案1:前端JavaScript在表单提交前处理
这种方式能让用户提交后,地址栏直接显示你想要的干净参数,体验比较好。我们可以在表单提交时,先修改输入框的内容,去掉https://(也可以顺便处理http://、www.这类前缀),再提交表单。
代码示例:
<form method="get" action="sample.php" onsubmit="processUrlInput()"> <input type="text" name="url" id="urlInput"> <input type="submit" value="send"> </form> <script> function processUrlInput() { const input = document.getElementById('urlInput'); // 匹配并移除开头的http://、https://,以及可选的www.前缀 let cleanedUrl = input.value.replace(/^(https?:\/\/)?(www\.)?/, ''); // 移除可能残留的开头斜杠 cleanedUrl = cleanedUrl.replace(/^\/+/, ''); input.value = cleanedUrl; } </script>
比如用户输入https://google.com,提交后就会变成site.com/sample.php?url=google.com;如果输入http://www.google.com,也会处理成google.com,灵活性很强。
方案2:后端PHP处理(更安全可靠)
前端的JS可能被用户禁用或者绕过,所以后端处理是更稳妥的兜底方案。你可以在sample.php里接收参数后,清理掉不需要的前缀,甚至可以重定向到处理后的URL,让地址栏显示干净的参数。
重定向到干净的参数URL
如果希望地址栏也显示处理后的参数,用这个代码:
<?php if (isset($_GET['url'])) { $originalUrl = $_GET['url']; // 清理前缀:http://、https://、www. $cleanedUrl = preg_replace('/^(https?:\/\/)?(www\.)?/', '', $originalUrl); // 移除开头的斜杠 $cleanedUrl = ltrim($cleanedUrl, '/'); // 重定向到处理后的地址 header("Location: sample.php?url=" . urlencode($cleanedUrl)); exit; } ?>
仅在后端使用清理后的值(不修改地址栏)
如果不需要修改地址栏,只是在业务逻辑里用干净的URL,直接处理即可:
<?php $cleanedUrl = ''; if (isset($_GET['url'])) { $cleanedUrl = preg_replace('/^(https?:\/\/)?(www\.)?/', '', $_GET['url']); $cleanedUrl = ltrim($cleanedUrl, '/'); } // 后续业务逻辑直接用$cleanedUrl变量就行 ?>
方案3:前端+后端双重处理(推荐)
把上面两个方案结合起来是最优解:前端处理提升用户体验,后端处理作为兜底,不管用户怎么提交参数,都能保证数据是干净的,同时地址栏也能显示你想要的格式。
内容的提问来源于stack exchange,提问作者Majid
相关产品推荐
相关产品推荐

