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/すると Web ページ (Google.com) を表示できません。

どんなヒントでも大歓迎です。

4

3 に答える 3

1

http://www.google.com/は絶対 URI でwww.google.com/あり、 は相対 URI であるため、Google のサーバーを指していません (リンクを表示しているページがそうでない場合)。

あなたはできる:

  • 何もせず、正しい URL を取得するのはユーザーの責任にします (他にも多くのエラーが発生する可能性があります)。
  • すべての URL の解決を試み、応答が 200 でない場合は拒否するか、ユーザーに URL の確認を求める
  • すべての URI を解析し、絶対 URI ではないものを拒否します
于 2013-01-27T19:03:36.917 に答える
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 に答える
0

後:$myLink = $_SESSION['MyLink'];追記

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