如果提交的URL不以它开头,请添加http://

时间:2016-12-12 16:08:41

标签: php url

使用此表单,用户可以找到网站的所有网址。如果用户提交网址,它的效果很好。但如果他们提交域名,则无效。

<?
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $url= $_POST["url"];

    $data=file_get_contents($url);
    $data = strip_tags($data,"<a>");
    $d = preg_split("/<\/a>/",$data);
    $count=1;
    foreach ( $d as $k=>$u ){
        if( strpos($u, "<a href=") !== FALSE ){
            $u = preg_replace("/.*<a\s+href=\"/sm","",$u);
            $u = preg_replace("/\".*/","",$u);
            echo "<hr>".$count++.$u."\n";
        }
    }
}
?>

<html>
<body>
<form style="margin: 10px;" action="" method="post">
        <label for="url">Enter a URL</label>
        <input type="text" name="url" id="url">
        <input type="submit" value="Go">
    </form>
</body>
</html>

6 个答案:

答案 0 :(得分:1)

这将是一个例子:

if ( strpos($url, 'http://') === false || strpos($url, 'https://') === false ) {
    $url = 'http://'.$url;
}

答案 1 :(得分:1)

您可以使用以下函数检查字符串是否以另一个字符串开头:

function startsWith($haystack, $needle) 
{
    // search backwards starting from haystack length characters from the end
    return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== false;
}

然后,如果它不以http://开头,则将其连接为前缀。

if(!startsWith(strtolower($url), "http://"))
{
    $url = 'http://'.$url;
}

答案 2 :(得分:1)

您可以使用regex解决问题:

$url = "google.com";

$formatted_url = addHttpToUrl($url);

function addHttpToUrl($url) {
    if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
        $url = "http://" . $url;
    }
    return $url;
}

// $formatted_url = "http://google.com"

希望这有帮助!

答案 3 :(得分:0)

if (!preg_match('#^https?://#i', $url)) {
  $url = 'http://'.$url;
}

答案 4 :(得分:0)

您在.htaccess询问了一个示例:

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

答案 5 :(得分:0)

使用filter_var()检查用户输入是否已经是有效的网址。

$url= $_POST["url"];之后,添加以下代码:

if(!filter_var($url,FILTER_VALIDATE_URL)) $url = 'http://'.$url;