繁体   English   中英

将URL提交到不带“http://”的表单,带有“www。”,或者两者都没有

[英]Submitting a URL into a Form without “http://”, with “www.”, or with neither

(编者)

你好,

在下面的表格中,当提交一个URL时, <div class="urlfield"><input name="url" type="url" id="url" maxlength="500"></div>的字段很好在它的开头有一个“http://”。

但是,如果仅使用“www”提交URL,则它不起作用。 在它前面,或既没有“http://”也没有“www”。

如果提交的URL在开头有任何或没有以下内容,我该如何使其工作:

http://

www.

http://www.

提前致谢,

约翰

形成:

echo '<div class="submittitle">Submit an item.</div>';  

echo '<form action="http://www...com/.../submit2.php" method="post"> 
    <input type="hidden" value="'.$_SESSION['loginid'].'" name="uid">  

 <div class="submissiontitle"><label for="title">Story Title:</label></div> 
    <div class="submissionfield"><input name="title" type="title" id="title" maxlength="1000"></div>  

 <div class="urltitle"><label for="url">Link:</label></div> 
    <div class="urlfield"><input name="url" type="url" id="url" maxlength="500"></div>

    <div class="submissionbutton"><input name="submit" type="submit" value="Submit"></div> 
</form>
';

submit2.php:

<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){header('Location: http://www...com/.../submit2.php');}

require_once "header.php";


if (isLoggedIn() == true)
{

$remove_array = array('http://www.', 'http://', 'https://', 'https://www.', 'www.');
$cleanurl = str_replace($remove_array, "", $_POST['url']);
$cleanurl = strtolower($cleanurl);
$cleanurl = preg_replace('/\/$/','',$cleanurl);
$cleanurl = stripslashes($cleanurl);

$title = $_POST['title'];
$uid = $_POST['uid'];
$title = mysql_real_escape_string($title);
$title = stripslashes($title);

$cleanurl = mysql_real_escape_string($cleanurl);

$site1 = 'http://' . $cleanurl;

$displayurl = parse_url($site1, PHP_URL_HOST);

function isURL($url1 = NULL) {
        if($url1==NULL) return false;

        $protocol = '(http://|https://)';
        $allowed = '[-a-z0-9]{1,63}';

        $regex = "^". $protocol . // must include the protocol
                         '(' . $allowed . '\.)'. // 1 or several sub domains with a max of 63 chars
                         '[a-z]' . '{2,6}'; // followed by a TLD
        if(eregi($regex, $url1)==true) return true;
        else return false;
}



if(isURL($site1)==true)
 mysql_query("INSERT INTO submission VALUES (NULL, '$uid', '$title', '$cleanurl', '$displayurl', NULL)");
else
 echo "<p class=\"topicu\">Not a valid URL.</p>\n";

} else {
    show_loginform();
}

if (!isLoggedIn())
{
    if (isset($_POST['cmdlogin']))
    {
        if (checkLogin($_POST['username'], $_POST['password']))
        {
            show_userbox();
        } else
        {
            echo "Incorrect Login information !";
            show_loginform();
        }
    } else
    {
        show_loginform();
    }

} else
{
    show_userbox();
}

require_once "footer.php";

?>

如果没有协议( http:// ),浏览器应该考虑url相对。

摆脱主机(www ... com)部分,并从以下斜杠开始,使用相对于域的文档根目录的URL。

或者,使用相对于表单所在页面的URL的URL(例如,可以是"../../something/else/submit.php"

要在不诉诸域根的情况下动态构建相对URL,您可能会发现预定义变量$_SERVER['PHP_SELF']很有用(具体内容可能因所讨论的Web服务器而异)。

它对我来说很好,但是在几个点上回显传递的url的值以查看代码失败的位置。

编辑尝试制作$cleanurl = mysql_real_escape_string($cleanurl);

$cleanurl = mysql_real_escape_string(trim($cleanurl));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM