1

我正在尝试存储网址,我需要前缀为“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);
    }
?>
4

6 回答 6

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.comftp://mydomain.com

正则表达式解释:

  • ^- 字符串的开头必须在这里
  • [a-zA-Z]+- 从 a 到 z 的字母,大写和小写都重复 1 次或多次
  • :- 一个字面:人物
  • \/\///- litteral//字符,但使用反斜杠在 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>
于 2013-04-22T08:21:12.207 回答
1

尝试这个:

var inputVal = $('#myInput').val();
inputVal = inputVal.substr(0, 8).search(/(http|https)(:\/\/)/,i) === 0
           ? 'http://' + inputVal
           : inputVal;

(增加了对 HTTPS 和不区分大小写的支持)

于 2013-04-22T08:05:46.647 回答
0

最简单的方法(JavaScript解决方案):

var visitorTyped = "example.com";
if (visitorTyped.indexOf("http://") === -1) {
   visitorTyped = "http://" + visitorTyped
}
于 2013-04-22T08:06:04.850 回答
0

由于您要求首选 PHP:

创建一个新变量来保存 url,然后检查它。然后,您可以将此新变量分配给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
} 
于 2013-04-22T08:07:02.840 回答
0

您可以使用原生 PHP 函数:

$url = (parse_url($url, PHP_URL_SCHEME) == NULL ? 'http://' : NULL )。$网址;

于 2013-04-22T08:35:06.247 回答
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
}
于 2013-04-22T08:25:56.257 回答