我正在尝试存储网址,我需要前缀为“http://”,所以如果访问者没有输入,我需要添加它,但如果他们输入它我不想要复制它。以前必须提出这个问题。也许我没找错?无论哪种方式,如果你能回答这个问题,你就是我渴望成为的那种人。
我想在PHP中这样做,但JS也可以。
编辑: 这就是我尝试添加JS但没有工作......
<form name="urlField" onsubmit="window.location.href = document.getElementById('addressfield').value; return false;">
<input type="text" name="address" id="addressfield" />
</form>
以下是发布数据的接收端的PHP:
<?php
if (isset($_GET['success']) === true && empty($_GET['success']) === true) {
echo '<img src="images/spacer.gif" border="0" width="270" height="1">Your links have been updated!';
} else {
if (empty($_POST) === false && empty($errors) === true) {
$update_data = array(
'a1_url' => $_POST['a1_url'],
'a1_text' => $_POST['a1_text'],
);
update_user($session_user_id, $update_data);
header('Location: ../edit_mode.php');
exit();
} else if (empty($errors) === false) {
echo output_errors($errors);
}
?>
答案 0 :(得分:2)
您可以使用一个简单的正则表达式来检查是否已指定URL的协议:
if (!preg_match('#^[a-zA-Z]+://#', $url)) {
//No current protocol - add http
$url = 'http://' . $url;
}
或在JS中:
if (!url.match(/^[a-zA-Z]+:\/\//)) {
url = 'http://' + url;
}
这将允许ssh://localhost
,https://www.facebook.com
,ftp://mydomain.com
等。
正则表达式解释:
^
- 字符串的开头必须在这里[a-zA-Z]+
- 从a到z的字母,大写和小写重复1次或更多次:
- 一个小型:
字符\/\/
或//
- 有问题的//
个字符,但是使用反斜杠在javascript中进行了转义。更新评论:
<script type="text/javascript">
function submitURLFieldForm() {
var url = document.getElementById('addressfield').value;
if (!url.match(/^[a-zA-Z]+:\/\//)) {
url = 'http://' + url;
}
window.location.href = url;
return false;
}
</script>
<form name="urlField" onsubmit="return submitURLFieldForm();"> URL<input type="text" name="address" /></form>
答案 1 :(得分:1)
试试这个:
var inputVal = $('#myInput').val();
inputVal = inputVal.substr(0, 8).search(/(http|https)(:\/\/)/,i) === 0
? 'http://' + inputVal
: inputVal;
(添加了对HTTPS和不区分大小写的支持)
答案 2 :(得分:0)
最简单的方式( JavaScript 解决方案):
var visitorTyped = "example.com";
if (visitorTyped.indexOf("http://") === -1) {
visitorTyped = "http://" + visitorTyped
}
答案 3 :(得分:0)
由于您要求您首选PHP:
创建一个新变量来保存网址,并对其进行检查。然后,您可以将此新变量分配给update_data
数组中的a1_url项以存储
if (empty($_POST) === false && empty($errors) === true) {
$url = $_POST['a1_url'];
if (strpos($url, 'http://') !== 0) {
$url = 'http://' . $url
}
$update_data = array(
'a1_url' => $url,
'a1_text' => $_POST['a1_text'],
);
// the remainder of your code
}
答案 4 :(得分:0)
您是否应该允许至少https,可能还有其他任何协议?
保留任何协议:
if (strpos($input, '://') === false) {
$input = 'http://' . $input
}
仅允许所有协议的子集,默认为http
$allowedProtocol = array ( 'http', 'https' );
$urlParts = explode( '://', $input );
if (count($urlParts) === 1) {
$input = 'http://' . $input
}elseif ( !in_array( $urlParts[0], $allowedProtocol ) ) {
// error handling
}
答案 5 :(得分:0)
您可以使用本机PHP函数:
$ url =(parse_url($ url,PHP_URL_SCHEME)== NULL?&#39; http://&#39;:NULL)。 $网址;