我有一个输入表单字段,用于收集混合字符串。
确定发布的字符串是否包含网址(例如http://link.com,link.com,www.link.com等),以便可以根据需要正确锚定。 的
这方面的一个例子就是微博功能,其中处理脚本将通过链接锚定任何内容。其他样本可能是这个帖子,其中'http://link.com'自动锚定。
我相信我应该在显示器上而不是在输入上接近它。我该怎么办呢?
答案 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>