创建以http:// clickable开头的字符串

时间:2009-06-29 09:11:52

标签: php

想要创建一个以http://或www clickable开头的字符串。

str_replace("http://", "$string", "<a href='$string'>");
str_replace("www", "$string", "<a href='$string'>");

不应该是那样的吗?

7 个答案:

答案 0 :(得分:3)

你在找这样的东西吗?

<?php
$content = 'this is a test http://www.test.net www.nice.com hi!';

$regex[0] = '|(http://[^\s]+)|i';      
$replace[0] = '<a href="${1}">${1}</a>';

$regex[1] = '| (www[^\s]+)|i';
$replace[1] = ' <a href="http://${1}">${1}</a>';

echo preg_replace($regex, $replace, $content);
?>

<强>更新 感谢macbirdie指出问题所在!我试着解决它。然而,只有在www之前有空格时它才有效。也许有人会想出一些更聪明,更优雅的东西。

答案 1 :(得分:2)

我使用的东西:

function linkify_text($text) {
  $url_re = '@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@';
  $url_replacement = "<a href='$1' target='_blank'>$1</a>";

  return preg_replace($url_re, $url_replacement, $text);
}

希望这有帮助。

答案 2 :(得分:1)

function clicky($text) {
    $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_+.~#?&//=]+)', '<a href="$1">$1</a>', $text);
    $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)', '$1<a href="http://$2">$2</a>', $text);
    $text = eregi_replace('([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})', '<a href="mailto:$1">$1</a>', $text);
    return $text;
}

答案 3 :(得分:0)

我看到锚标签内没有文字,这使得它不可见。

答案 4 :(得分:0)

您正在寻找的是正则表达式。像这样......

$link = preg_replace('/(http:\/\/[^ ]+)/', '<a href="$1">$1</a>', $text);

答案 5 :(得分:0)

str_replace具有不同的参数顺序(您的版本会将http://<a href='$string'>的所有出现替换为$string)。

如果你想在其他文本中创建html链接,那么你需要使用正则表达式而不是常规替换:

preg_replace('/(http:\/\/\S+/)', '<a href="\1">\1</a>', $subject_text);

答案 6 :(得分:0)

Merkuro的解决方案有一些调整。

<?php
$content = 'this is a test http://www.test.net www.nice.com hi!';

$regex[0] = '`(|\s)(http://[^\s\'\"<]+)`i';      
$replace[0] = '<a href="${2}">${2}</a>';

$regex[1] = '`(|\s)(www\.[^\s\'\"<]+)`i';
$replace[1] = ' <a href="http://${2}">${2}</a>';

echo preg_replace($regex, $replace, $content);
?>

模式:

(|\s)

匹配字符串或空格的开头。您也可以使用单词边界。

\b

我添加了一个终止网址的其他字符,“,”,&lt;。