确定用户输入包含URL

时间:2011-08-08 15:07:21

标签: php javascript jquery

我有一个输入表单字段,用于收集混合字符串。

确定发布的字符串是否包含网址(例如http://link.com,link.com,www.link.com等),以便可以根据需要正确锚定。

这方面的一个例子就是微博功能,其中处理脚本将通过链接锚定任何内容。其他样本可能是这个帖子,其中'http://link.com'自动锚定。

我相信我应该在显示器上而不是在输入上接近它。我该怎么办呢?

5 个答案:

答案 0 :(得分:2)

您可以使用正则表达式在PHP中的每个匹配项上调用函数。例如,您可以使用以下内容:

<?php

function makeLink($match) {
    // Parse link.
     $substr = substr($match, 0, 6);
     if ($substr != 'http:/' && $substr != 'https:' && $substr != 'ftp://' && $substr != 'news:/' && $substr != 'file:/') {
        $url = 'http://' . $match;
     } else {
        $url = $match;
     }

     return '<a href="' . $url . '">' . $match . '</a>';
}
function makeHyperlinks($text) {
    // Find links and call the makeLink() function on them.
    return preg_replace('/((www\.|(http|https|ftp|news|file)+\:\/\/)[_.a-z0-9-]+\.[a-z0-9\/_:@=.+?,##%&~-]*[^.|\'|\# |!|\(|?|,| |>|<|;|\)])/e', "makeLink('$1')", $text);
}

?>

答案 1 :(得分:1)

您需要使用正则表达式来匹配常见的网址格式。 PHP提供了一个名为preg_match的函数,允许您执行此操作。

正则表达式本身可以采用多种形式,但这里有一些东西可以让你开始(也许只是Google的'URL正则表达式':

'/ ^(((HTTP | HTTPS | FTP)://)([[α-ZA-Z0-9] - ])+()([[α-ZA-Z0-9] ]){2,4}([[α-ZA-Z0-9] / + =%&安培;?_〜 - ] )) $ /'

所以你的代码看起来应该是这样的:

$matches  = array(); // will hold the results of the regular expression match
$string   = "http://www.astringwithaurl.com";
$regexUrl = '/^(((http|https|ftp):\/\/)?([[a-zA-Z0-9]\-\.])+(\.)([[a-zA-Z0-9]]){2,4}([[a-zA-Z0-9]\/+=%&_\.~?\-]*))*$/';

preg_match($regexUrl, $string, $matches);

print_r($matches); // an array of matched patterns

从这里开始,您只想将这些URL模式包装在一个anchor / href标签中,然后就完成了。

答案 2 :(得分:0)

您想要的准确度如何?鉴于URL的变化程度如何,您将不得不在某处绘制线条。例如。 www.ca是一个完全有效的主机名,并且会显示一个网站,但这不是您希望工作的内容。

答案 3 :(得分:0)

您应该为此调查regular expressions

您将构建一个模式,该模式将匹配字符串中看起来像URL的部分并对其进行适当格式化。

它会出现这样的事情(取消它,没有测试过它);

$pattern = "((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)";
preg_match($pattern, $input_string, $url_matches, PREG_OFFSET_CAPTURE, 3);

$ url_matches将包含与url模式匹配的输入字符串的所有部分的数组。

答案 4 :(得分:-1)

您可以使用$_SERVER['HTTP_HOST']获取主机信息。

<?php

$host = $SERVER['HTTP_HOST'];

 ?>


  <a href ="<?= $host ?>/post.html">Post</a>