0

我正在使用一个简单的 html 表单从用户那里获取数据,用户首先预览这些数据,然后将其发布到 Mysql 数据库中。表格是:

<form name="MyForm" enctype="multipart/form-data" method="post" action="myupload.php">
<p>Your name <input type="text" name="FormName" size="25" maxlength="50"> </p>
<p>Your email <input type="text" name="FormEmail" size="25" maxlength="50"></p>
<p> Link <input type="text" name="FormLink" size="25" maxlength="50"></p>
<p> <input type="submit" name="Submit" value="Submit"></p> 
</form>

在 php 页面中,我使用以下代码:

$_SESSION['MyName']= $_POST['FormName'];
$_SESSION['MyEmail']= $_POST['FormEmail'];
$_SESSION['MyLink']= $_POST['FormLink'];

$myName = $_SESSION['MyName'];
$myEmail = $_SESSION['MyEmail'];    
$myLink = $_SESSION['MyLink'];

echo "Name: $myConName <br> "; 
echo "Email: $myConEmail <br>";  
echo "<a href=$myLink target=\"_blank\"> Read more</a></p>";

但是,如果用户输入,http://www.google.com/那么它可以正常工作,但如果用户输入www.google.com/,则无法显示网页(Google.com)。

任何提示将不胜感激。

4

3 回答 3

1

像这样的东西应该工作:

if (substr($url, 0, 7) != 'http://') { 

  $myLink = "http://".$myLink;

}

实际上它还应该检查是否没有“https://”——所以这可能是一个选项:

if ((substr($url, 0, 7) != 'http://')&&(substr($url, 0, 8) != 'https://')) { 

  $myLink = "http://".$myLink;

}

或者这也可能是一个选择:

if (substr($url, 0, 4) != 'http') { 

  $myLink = "http://".$myLink;

}

…虽然非常接近 powtac 的建议…</p>

这实际上可能与此“几乎重复”:

检查字符串是否包含“HTTP://”

于 2013-01-27T19:12:59.573 回答
1

http://www.google.com/是绝对 URI,www.google.com/是相对 URI,因此它不指向 Google 的服务器(除非显示链接的页面也是如此)。

你可以:

  • 什么都不做,让用户自己负责获取正确的 URL(他们可能会犯很多其他错误)
  • 尝试解析所有 URL,如果响应不是 200,则拒绝或要求用户确认 URL
  • 解析所有 URI 并拒绝任何非绝对 URI
于 2013-01-27T19:03:36.917 回答
0

之后:$myLink = $_SESSION['MyLink'];添加

$myLink = substr($myLink, 0, 4) == 'http' ? $myLink : 'http://'.$myLink;
于 2013-01-27T19:02:40.947 回答