确定URL或字符串PHP

时间:2011-09-29 08:57:42

标签: php string

我正在创建链接和文本服务,但我遇到了一个问题,即:只有一个输入文本表单,用户可以粘贴这样的内容: http:// asdf .com - 将注册为链接,或“asdf http:// test .com”因为http://,它会注册为网址,或者 asdf - 它将注册为字符串,因为它不包含http://

但是当用户写下以下内容时,我的问题就出现了: asdf http://asdf.com,在我当前的程序中输出“url”值。我现在已经进行了大约一个小时的实验,而且我有3位代码(他们都在同一个文档中被评论,如果他们给出错误,请原谅我!)

    <?
    $str = $_POST['paste'];
    if(stristr($str, "http://")) {
        $type = "url"; 
    }
    if(stristr($str, "https://")) { 
        $type = "url";
    }
    if($type!="url") { 
        $type = "string";
    } 
    ?>

下一步:

<?
    $type = "url";
        if($type=="url"){
        $t = substr($str, 8);
        if(stristr($t, "https://")==$t){
        $type = "url";}
        if(stristr($t, "https://")==$t){ 
        $type = "url";}
        if(stristr($t, "http://")!=$t){
        $type = "string";}
        if(stristr($t, "https://")!=$t){
        $type = "string";}
        } 
        echo $type;
        ?>

下一步:

<?    
$url = "hasttp://cake.com";
    if(stristr($url, "http://")=="") {
    $type = "string"; } else { 
    $type = "url"; 
    $sus = 1;}
    if(stristr($url, "http://")==$url) { 
    $type = "url"; }
    if($sus==1) { 
    $r = substr($url, 7);
    if(stristr($r,"http://")!="http://") { 
    $type = "url"; }
    if($r=="") {
    $type = "string";
    }
    }
    echo $type;
?>

我不知道如何将字符串“asdf http://asdf.com”分类为字符串,同时将“asdf”分类为字符串,并将“http://asdf.com”分类为一个网址..我还没有尝试的另一个想法是strpos,但这就是我现在正在做的事情。

有什么想法吗?

非常感谢! :)

这个问题的某些部分由于某种原因而被切断,道歉!

5 个答案:

答案 0 :(得分:4)

$type = '';
if (preg_match('%^https?://[^\s]+$%', $url)) {
    $type = 'url';
} else {
    $type = 'string';
}

这将匹配以http://https://开头的任何值,并且其中不包含url类型的任何空格。如果该值不以http://https://开头,或者其中包含空格,则其类型为string

答案 1 :(得分:1)

PHP parse_url是您的功能:

在严重格式错误的网址上,parse_url()可能会返回FALSE。

如果省略component参数,则返回关联数组。阵列中至少存在一个元素。此数组中的潜在键是:

  • 计划 - 例如http
  • 主持人
  • port
  • 用户
  • 传递
  • 路径
  • 查询 - 问号后?
  • 片段 - 在hashmark#
  • 之后

如果指定了component参数,则parse_url()返回一个字符串(或者在PHP_URL_PORT的情况下为整数)而不是数组。如果请求的组件在给定的URL中不存在,则返回NULL。

答案 2 :(得分:0)

如果我正确理解了这个问题,你想要检测用户何时同时输入字符串和网址,并相应地解析每个字符串。

尝试使用explode(" ", $userInput);,这将返回一个包含由空格分隔的所有字符串的数组。您可以检查数组中的每个元素并设置类型。

答案 3 :(得分:0)

您应该使用正则表达式来检查字符串是否以http

开头

if(preg_match('/^http/',$string_to_check)){ //this is a url }

答案 4 :(得分:0)

$type = strpos($str, 'http') === 0 ? 'url' : 'string':

strpos函数返回字符串中匹配的位置,如果不匹配则返回FALSE。 tripple equals检查结果不仅转换为0(如FALSE所做的那样),但它实际上也是整数(即字符串以http开头)。

你也可以使用像

这样的东西
switch (true) {
    case strpos(trim($str), 'http://') === 0: 
    case strpos(trim($str), 'https://') === 0:
        $type = 'url'; 
        break;
    default:
        $type = 'string';
        break; // I know this is not needed, but it is pretty :-)
}