自动文本链接在PHP中

时间:2016-05-26 12:17:04

标签: php

我有一个代码可以将文本中的所有链接转换为真正的HTML链接

//add auto link
$oldMessage =  $discussion->message;
$newMessage = preg_replace('!((http\:\/\/|ftp\:\/\/|https\:\/\/)|www\.)([-a-zA-Zа-яА-Я0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?!ism', '<a  href="//$3" target="_blank" ">$1$3</a>',$oldMessage);
$discussion->message = $newMessage;

更好地理解这是$ oldMessage示例文本

<div>Hier eine Liste der Protokolle von Medi-Learn:</div>
<br><br>
<div>http://www.medi-learn.de/pruefungsprotokolle/facharztpruefung/detailed.php?ID=1266</div>

<a href="google.de">test</a>

<br><div>http://www.medi-learn.de/pruefungsprotokolle/facharztpruefung/detailed.php?ID=1231</div>
<br><div>http://www.medi-learn.de/pruefungsprotokolle/facharztpruefung/detailed.php?ID=1221</div>
<br><div>http://www.medi-learn.de/pruefungsprotokolle/facharztpruefung/detailed.php?ID=1188</div>
<br><div>http://www.medi-learn.de/pruefungsprotokolle/facharztpruefung/detailed.php?ID=1187</div>
<br><div>http://www.medi-learn.de/pruefungsprotokolle/facharztpruefung/detailed.php?ID=1178</div></div>

如果原始$ oldMessage已包含链接(请参阅测试),问题是无法正常工作!?!?

对此有何解决方案?

1 个答案:

答案 0 :(得分:0)

此解决方案适合我

preg_match_all('!(((f|ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i', $content, $matches);

            foreach ($matches[0] as $key=>$link) {
                if (!preg_match('!<a(.*)'.$link.'(.*)/a>!i', $content))
                {
                    $content = str_replace($link, '<a href="'.$link.'" target="_blank">'.$link.'</a>', $content);
                }
            }