簡體   English   中英

PHP正則表達式文本URL到HTML鏈接

[英]PHP Regular Expression Text URL to HTML Link

我正在一個項目中,我需要替換從domain.comwww.domain.comhttp(s)://www.domain.com任何地方的文本URL,並將電子郵件地址替換為正確的html <a>標簽。 我過去使用的是很棒的解決方案,但是它使用了現在已貶值的eregi_replace函數。 最重要的是,用於此函數的正則表達式不適用於preg_replace

因此,基本上,用戶輸入的消息中可能包含/可能不包含鏈接/電子郵件地址,並且我需要一個與preg_replace一起使用的正則表達式,以用<a href="link">link</a>類的HTML鏈接替換該鏈接/電子郵件。 <a href="link">link</a>

請注意,我還有其他多個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));

為此,我創建了一組非常基本的正則表達式。 不要指望它們是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 ) );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM