1

これが私のコードです

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="text"/>
<input type="submit" name="submit" value="submit"/>
</form>
<?php
if(isset($_POST['submit'])){
$url = $_POST['text'];
$parse = parse_url($url);
echo $parse['host'];
}
?>

parse_url を使用して、誰かが URL を入力したときに出力されるホスト名を取得していますが、ガベージ入力を入力しようとすると、「未定義のインデックス: ホスト」というエラーが発生します。 parse_url 関数の出力をエコーする前の有効な URL または単なる文字列

4

3 に答える 3

6

ホストが定義されているかどうかを確認できます。

echo isset($parse['host']) ? $parse['host'] : 'Invalid input';

または、正規表現を作成して、parse_url に渡す文字列が正しくフォーマットされているかどうかを確認できます。これは少し難しいですが、実行できます。参照: PHPまたはPHP の URL 検証 + 検出を使用して正規表現で URL を解析する

于 2011-11-08T06:10:44.440 に答える
1

変数をurlとして解析できなかった場合、parse_url()はfalseを返します。parse_url()の結果で!== falseをチェックすると、文字列が関数によって正常に解析されたため、有効なURLであることがわかります。

$parse = parse_url($url);
if($parse !== false)
{
    echo 'valid url';
    if(isset($parse['host'])) echo $parse['host'];
}

その後、「有効なURL」で正確に何を意味するのかを理解するのはあなた次第です。PHPのparse_url関数は、単なるパスなどの文字列を解析できるようになります。与えられた問題/コンテキストに応じて、「有効なURL」が少なくともscheme + hostで構成されていると感じる場合があります。または、別のコンテキストでは、相対パス(ホストなし)のみも有効である場合があります。これらのチェックを自分で追加すると、解析された配列にキーが存在するかどうかをチェックするだけで、次のようになります。

$parse = parse_url($url);
if($parse !== false)
{
    if(isset($parse['scheme']) && isset($parse['host']))
    {
        echo 'valid url';
        echo $parse['host'];
    }
}
于 2011-11-08T08:47:08.117 に答える
1

正規表現を使用する

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="text"/>
<input type="submit" name="submit" value="submit"/>
</form>
<?php
if(isset($_POST['submit'])){
$url = $_POST['text'];

define('REGEX_URL','/http\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/');

if(preg_match(REGEX_URL, $url, $url)) {
   echo "<a href=\"{$url[0]}\">{$url[0]}</a>";
} else {
   echo "<p>No Match Found</p>";
}
}
?>
于 2011-11-08T06:28:42.100 に答える