我正在寻找一种搜索文本字符串的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完成了这项工作,但如果我只存储链接,用户就不会这么做了。
答案 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;