这是我的代码
<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时输出的主机名,现在如果我尝试输入一些垃圾输入,则会出错:“Undefined index:host”,我想知道我们怎么做在回显parse_url函数的输出之前检查它是一个有效的url还是只是一个字符串
答案 0 :(得分:6)
您可以检查主机是否已定义:
echo isset($parse['host']) ? $parse['host'] : 'Invalid input';
或者,您可以创建一个正则表达式来检查您传递给parse_url的字符串是否格式正确。这有点难,但可以做到。请参阅:Parse URL with Regex using PHP或PHP url validation + detection
答案 1 :(得分: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>";
}
}
?>
答案 2 :(得分:1)
parse_url()将返回false。 检查!== false的parse_url()结果会告诉您该函数已成功解析该字符串,因此是一个有效的URL。
$parse = parse_url($url);
if($parse !== false)
{
echo 'valid url';
if(isset($parse['host'])) echo $parse['host'];
}
在那之后,你可以通过“有效的网址”找出你的意思。 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'];
}
}