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 验证 + 检测使用 Regex 解析 URL

于 2011-11-08T06:10:44.440 回答
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 回答
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'];
}

在那之后,由你来弄清楚你对“有效网址”的确切含义。PHP 的 parse_url 函数将能够解析一个字符串,它只不过是一个路径。根据您给定的问题/上下文,您可能会觉得“有效 url”至少由方案 + 主机组成,或者在不同的上下文中,只有相对路径(没有主机)也可能有效。自己添加这些检查 - 只是检查解析后的数组中是否存在密钥 - 可能如下所示:

$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 回答