私はこれを調査してきましたが、まだうまくいかなかった2つの関連する回答しか見つかりませんでした。
とりあえず。テキスト内のリンクを見つけて自動リンクしようとしていますが、それらが既にhtmlタグにある場合は自動リンクしません。(< a > < img >) http、https、www などのすべてのリンクをサポートする必要があります。
私は正規表現が苦手ですが、何かをまとめようとしました。
function b($text)
{
// a more readably-formatted version of the pattern is on http://daringfireball.net/2010/07/improved_regex_for_matching_urls
$pattern = '(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))';
$callback = create_function('$matches', '
$url = array_shift($matches);
$url_parts = parse_url($url);
$text = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH);
$text = preg_replace("/^www./", "", $text);
$last = -(strlen(strrchr($text, "/"))) + 1;
if ($last < 0) {
$text = substr($text, 0, $last) . "…";
}
return "<a rel="nofollow" href=".$url.">".$text."</a>";
');
return preg_replace_callback($pattern, $callback, $text);
}
function autolink($txt)
{
return preg_replace_callback('#(?<!href\=[\'"])(https?|ftp|file)://[-A-Za-z0-9+&@\#/%()?=~_|$!:,.;]*[-A-Za-z0-9+&@\#/%()=~_|$]#', 'b', $txt);
}
しかし、運が悪いので、この時点で何をすべきかわかりません。