2017-02-14 12 views
1

私はここで広く検索しましたが、私の特定のニーズに合ったものは見つかりませんでした。PHPでRegexを使用するURLとEMailsをHTMLリンクに変換します

PHPでregexを使ってテキストブロックを解析し、2つのことを行う必要があります。

  1. HTMLにURLを変換し
  2. リンクmailto: HTMLにメールを変換し、私は彼らがseperatly働いてきたが、問題は、URLの変圧器は、電子メールアドレスをドメインをオフにリンクしようとしている

をリンクします。そして私が最初に逆に進むと、EMailリンクのhref属性が再リンクされ、壊れたHTMLが生成されます。ここで

は、私が働いているものです:

public function getParsedBodyAttribute() 
{ 
    $string = $this->body; 

    $string = preg_replace('/(\[email protected]\S+\.\S+)/', '<a href="mailto:$1">$1</a>', $string); 

    return preg_replace('(?!(?!.*?<a)[^<]*<\/a>)(?:(?:https?|ftp|file)://|www\.|ftp\.)[-A-Z0-9+&#/%=~_|$?!:,.]*[A-Z0-9+&#/%=~_|$]', '<a href="http$2://$4" target="_blank" title="$0">$0</a>', $string); 
} 
+0

は、使用しているものの例を提供します参照してください。 – chris85

+0

リンクするにはhttp://www.google.com https://google.com google.com [email protected]が必要です。うまくいけば、これはあなたが例を意味するものです。 – cPfeifer

+0

だから私は理想的には最初にそれはすべての電子メールをリンクし、スルーして、すでにブロックにないURLを探していたと思います。 – cPfeifer

答えて

0

私は、これはあなたを助けるだろうと思います。

<?php 
 
//REGEX &copy; https://github.com/virdwait/virdwaitJs 
 
$str = "http://www.google.com , works in ftp://ftp.google.com , then in www.twitter.com , now google.com and again it is https://www.facebook.com/ and then changed to : [email protected] "; 
 
$str=preg_replace('/([a-zA-Z0-9]{2,}((\!|\#|\$|\%|\&|\'|\*|\+|\-|\/|\=|\?|\^|\_|\`|\{|\||\}|\~|\!|\#|\$|\%|\&|\'|\*|\.)[a-zA-Z0-9]+)*@[a-zA-Z0-9-]+\.[a-zA-Z]{2,6}(\.[a-zA-Z0-9]{2,6}){0,1}){1}/','<a href="mailto:$1">$1</a>',$str); 
 
$str=preg_replace('/((((https:\/\/|http:\/\/|ftp:\/\/){0,1}(www.|ftp.){1})|\s[^www\.]){1}[a-zA-Z0-9-]+\.[a-zA-Z]{2,10}(\.[a-zA-Z]{2,10}){0,1}(\/){0,1}){1}/','<a href="$1">$1</a>',$str); 
 

 
echo $str; 
 

 
//return $str 
 
?>

デモHere

+0

それはうまくいきますが、私もsomething.comが必要です。あなたのURLは 'http://' – cPfeifer

+0

というURLでのみ動作するようです。今すぐチェックしてください。詳細を読む。 –

+0

あなたはスタックオーバーフローの投稿に私の必要が来たhaha – cPfeifer

関連する問題