将特定字符串转换为链接?

时间:2011-08-31 08:28:53

标签: php html

我正在寻找一种搜索文本字符串的php方式,并将该字符串中的文本转换为链接。

n being numbers 1-9
Jnn:nn:nn:nn

链接位看起来像这样

<a href='http://juno.astroempires.com/map.aspx?loc=Jnn:nn:nn:nn'>Jnn:nn:nn:nn</a>

希望这是有道理的。我知道它可能但我不知道该怎么做。


这是我提出的最终解决方案,因为我已集成到现有功能中,感谢the bumpobox和编辑Tobiask的想法

function makeClickableLinks($text){
    $text = html_entity_decode($text);
    $text = " ".$text;
    $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
            '<a href="\\1" target=_blank>\\1</a>', $text);
    $text = eregi_replace('(((f|ht){1}tps://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
            '<a href="\\1" target=_blank>\\1</a>', $text);
    $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
            '\\1<a href="http://\\2" target=_blank>\\2</a>', $text);
    $text = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})',
            '<a href="mailto:\\1" target=_blank>\\1</a>', $text);
    $text = eregi_replace('(J[0-9]{2}):([0-9]{2}):([0-9]{2}):([0-9]{2})',
            '<a href="http://juno.astroempires.com/map.aspx?loc=\\1:\\2:\\3:\\4" target=_blank>\\1:\\2:\\3:\\4</a>', $text);
    return $text;
}

这用于ajax / mysql聊天系统。我确实通过jQuery完成了这项工作,但如果我只存储链接,用户就不会这么做了。

2 个答案:

答案 0 :(得分:2)

查看preg_replace

http://php.net/manual/en/function.preg-replace.php

我没有测试过这个,但它应该非常接近

$str = preg_replace("/(J\d{2}:\d{2}:\d{2}:\d{2})/s", "<a href="{$1}">{$1}</a>", $str);

\ d匹配一个数字 {2}表示2位数

{$ 1} =在第一组()

中匹配的所有内容

答案 1 :(得分:1)

使用正则表达式引擎完全有点过头了。为什么不尝试这样的事情:

$url_base   = 'http://juno.astroempires.com/map.aspx';
$loc        = 'Jnn:nn:nn:nn';
$parameters = array('loc' => $loc);

$url = sprintf('<a href="%s">%s</a>', $url_base.'?'.http_build_query($parameters), $loc);

// do whatever you need with $url
echo $url;