URL をリンクに自動的に変換し、Twitter@reply
のユーザー名を Twitter プロファイルにリンクし、メール アドレスをmailto
プロトコルを使用したリンクに自動的に変換する PHP 関数を作成しました。
スクリプトは次のとおりです。
function autolink($a, $b){
$e = "";
$f = array(
'link' => '~(http(s|)\:\/\/(www\.|)((\w+)\.(\w+)(\:[0-9]{2,5}|)\.[a-z]{2,5}|(\w+)(\:[0-9]{2,5}|)\.[a-z]{2,5}))((((\/|)\w+)(\.[a-z]{2,5}|))+)(\?(\w+\=\w+(\&|))+|)~',
'email' => '~\w+\@\w+(\:[0-9]{2,5}|)\.[a-z]{2,5}~',
'twitter' => '~\@([a-zA-Z_0-9]){1,15}~'
);
switch ($b) {
case "link":$e = preg_replace_callback($f['link'], function ($a) {return '<a href="'.$a.'" rel="nofollow" target="_blank">'.$a.'</a>';},$a);break;
case "email":$e = preg_replace_callback($f['email'], function ($a) {return '<a href="mailto:'.$a.'" rel="nofollow" target="_blank">'.$a.'</a>';},$a);break;
case "twitter":$e = preg_replace_callback($f['twitter'], function ($a) {return '<a href="https://twitter.com/#!/'.str_replace('@','',$a).'" rel="nofollow" target="_blank">'.$a.'</a>';},$a);break;
}
return $e;
}
私が抱えている唯一の問題は、リンクを返す代わりに、「配列」という単語を返すことです。
たとえば、次のようになります。
autolink("This is my site http://weebuild.biz", "link");
これを返しています:
これは私のサイトの配列です
これを返す必要がある場合:
これは私のサイトです
<a href="http://weebuild.biz" rel="nofollow" target="_blank">http://weebuild.biz</a>
元のスクリプトは、私が書いた JavaSript にもありました: http://jsfiddle.net/shawn31313/umgqR/2/
私は PHP 開発者ではないので、JavaScript バージョンにはさらにいくつかの機能があります。
おそらく問題は、JavaScript から正規表現を取得し、それを PHP に配置したことです。PHP の正規表現が JavaScript と異なるかどうかはわかりません。
前もって感謝します。