在php中使用parse_url,我们如何检查输入是url还是字符串

在php中使用parse_url,我们如何检查输入是url还是字符串,php,parse-url,Php,Parse Url,这是我的密码 <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['t

这是我的密码

<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'];
}
?>

您可以检查主机是否已定义:

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

或者,您可以创建一个正则表达式来检查传递给parse_url的字符串的格式是否正确。这有点困难,但可以做到。请参阅:或

您可以检查主机是否已定义:

echo isset($parse['host']) ? $parse['host'] : 'Invalid input';
或者,您可以创建一个正则表达式来检查传递给parse_url的字符串的格式是否正确。这有点困难,但可以做到。请参阅:或使用正则表达式

<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>";
}
}
?>
使用正则表达式

<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>";
}
}
?>
如果变量无法解析为url,则parse_url()将返回false。 正在检查!==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+主机组成,或者在不同的上下文中,只有相对路径(没有主机)也可能有效。您自己添加这些检查—只需检查已解析数组中是否存在密钥—可能看起来像:

$parse = parse_url($url);
if($parse !== false)
{
    if(isset($parse['scheme']) && isset($parse['host']))
    {
        echo 'valid url';
        echo $parse['host'];
    }
}
如果无法将变量解析为url,则parse_url()将返回false。 正在检查!==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+主机组成,或者在不同的上下文中,只有相对路径(没有主机)也可能有效。您自己添加这些检查—只需检查已解析数组中是否存在密钥—可能看起来像:

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

改为使用
preg_match()
,或参阅此使用
preg_match()
相反,或者看到这一点,应该注意,在PHP5.3.3之前的
parse_url
在返回
false
时也会触发
E_警告,因此您可能需要在@parse_url
中使用
@parse_url
来抑制此情况
E_警告
当它返回
false
时,因此您可能需要在@parse_url
来抑制它