【问题标题】:PHP Regular Expression Text URL to HTML LinkPHP 正则表达式文本 URL 到 HTML 链接
【发布时间】:2011-04-28 07:17:51
【问题描述】:

我正在做一个项目,我需要将文本网址替换为从domain.comwww.domain.comhttp(s)://www.domain.com 的任何地方,并将电子邮件地址替换为正确的 html <a> 标记。过去我使用了一个很好的解决方案,但它使用了现在已贬值的eregi_replace 函数。最重要的是,用于此类函数的正则表达式不适用于preg_replace

所以基本上,用户输入一条消息,其中可能包含/可能不包含链接/电子邮件地址,我需要一个与 preg_replace 一起使用的正则表达式,以使用 HTML 链接(如 @987654328)替换该链接/电子邮件@。

请注意,我还有多个其他 preg_replaces。以下是我目前正在进行的其他替换代码。

$patterns = array('~\[@([^\]]*)\]~','~\[([^\]]*)\]~','~{([^}]*)}~','~_([^_]*)_~','/\s{2}/');
$replacements = array('<b class="reply">@\\1</b>','<b>\\1</b>','<i>\\1</i>','<u>\\1</u>','<br />');
$msg = preg_replace($patterns, $replacements, $msg);
return stripslashes(utf8_encode($msg));

【问题讨论】:

    标签: php regex url preg-replace


    【解决方案1】:

    我为此创建了一组非常基本的正则表达式。不要期望它们 100% 可靠,您可能需要随时调整它们。

    $pattern = array(
      '/((?:[\w\d]+\:\/\/)?(?:[\w\-\d]+\.)+[\w\-\d]+(?:\/[\w\-\d]+)*(?:\/|\.[\w\-\d]+)?(?:\?[\w\-\d]+\=[\w\-\d]+\&?)?(?:\#[\w\-\d]*)?)/' , # URL
      '/([\w\-\d]+\@[\w\-\d]+\.[\w\-\d]+)/' , # Email
      '/\[@([^\]]*)\]/' , # Reply
      '/\[([^\]]*)\]/' , # Bold
      '/\{([^}]*)\}/' , # Italics 
      '/_([^_]*)_/' , # Underline
      '/\s{2}/' , # Linebreak
    );
    $replace = array(
      '<a href="$1">$1</a>' ,
      '<a href="mailto:$1">$1</a>' ,
      '<b class="reply">@$1</b>' ,
      '<b>$1</b>' ,
      '<i>$1</i>' ,
      '<u>$1</u>' ,
      '<br />'
    );
    $msg = preg_replace( $pattern , $replace , $msg );
    return stripslashes( utf8_encode( $msg ) );
    

    【讨论】:

    • 好人!你知道你在做什么!感谢您对此提供的帮助。
    • 快速注释 - 在 $replace 结束后添加一个分号。
    • @Lucanos 这很好,但是 url 不支持括号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2014-10-24
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多