2012-01-23 13 views
0

データベースに挿入する前に、コメント内の検出されたURLにタグを自動的に追加するには、次のコマンドを使用します。PHPで検出されたURLにhttp://を追加する

$pattern = "@\b(https?://)?(([0-9a-zA-Z_!~*'().&=+$%-]+:)?[0-9a-zA-Z_!~*'().&=+$%-]+\@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+\.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z]\.[a-zA-Z]{2,6})(:[0-9]{1,4})?((/[0-9a-zA-Z_!~*'().;?:\@&=+$,%#-]+)*/?)@"; 

$text_with_hyperlink = stripslashes(preg_replace($pattern, '<a href="\0" class="oembed">\0</a>', $body)); 

すべてが、私は任意のURLの「のhttp://」なしで入力されている願っているという事実から離れて素晴らしい作品、それは、URLの先頭に追加しています。

コメントを含有する上記のコードで

ユーザーの種類は、私が望む

「私たちのサイトwww.facebook.comを訪問来る」しかし場合

戻り

come visit our site <a href="http://www.facebook.com">http://www.facebook.com</a>「私たちのサイトhttp://www.facebook.comを訪問してきます」 http://接頭辞を含むURLを返します。

この種の検出を行うためにコードを変更するにはどうすればよいですか?

編集:もともと言及に失敗した私の謝罪はまた、www以外のものを検出する能力でなければなりません。理想的には、m.facebookやfacebook.comなどのドメイン。

+0

HTTP ://stackoverflow.com/questions/910912/extract-urls-from-text-in-php –

+0

とこれ:http://stackoverflow.com/questions/1925455/how-to-mimic-stackoverflow-auto-link-行動 –

+0

とこのhttp://css-tricks.com/snippets/php/find-urls-in-text-make-links/ –

答えて

1

一つの迅速かつ汚いソリューションは、以下のようhttp://www.?www.?を置き換えるために、次のようになります。<a>追加するコードの前に

$text_with_hyperlink = preg_replace("|(?<!http://)(www\.\S+)|", "http://$1", $text_with_hyperlink); 

場所、それは、それはすべてのwww.links.comhttp://www.links.comに変換します。

+1

その唯一の問題は、ユーザーにwww(たとえばfacebook.com)が含まれていないか、別のサブドメイン(www1.facebook.comやm.facebook.comなど)がある場合です。最終的には、文字列がURLかどうかを確認し、最初の部分がhttpまたはhttpsと一致するかどうかを確認し、一致しない場合は追加してください。 – imkingdavid

+0

はい、これは無限です。あなたは標準を設定し、それに従う必要があります。そうでないと、正規表現を壊すためにいつも別の調整を見つけることができます。 –

+0

ありがとうございます真実...あなたのソリューションは実際に質問で要求されたとおりに正確に動作します。どういうわけか、私は1時間または2時間待ってから答える(Stefansの答えは自分のものと同じです)とマークして、誰かが非wwwを説明できる解決策を提供できるようにします。ドメイン。質問ではっきりとしていないことについて私の謝罪、それは見落としだった。 – gordyr

1

たぶんここで、これはあなたが探しているものです。http://snippets.dzone.com/posts/show/6156

//編集: この1についてはどう:

<?php 
$body = $_GET['body']; 
$pattern = "/(\\s+)((?:[a-z][a-z\\.\\d\\-]+)\\.(?:[a-z][a-z\\-]+))(?![\\w\\.])/is"; 
$text_with_hyperlink = preg_replace($pattern, '<a href="http://\\0" class="oembed">\0</a>', $body); 
$text_with_hyperlink = preg_replace("/(http)(:)(\\/)(\\/)(\\s+)/is", "http://", $text_with_hyperlink); 
echo $text_with_hyperlink; 
?> 

(非常に汚れて、私は知っている...)

+0

ステファンありがとうございました...それはあなた自身にも当てはまる真実の答えについての私のcomentを見てください。しかし、良い提案をありがとう。 – gordyr

+0

私はそれを考えて... – Stefan

+0

これを正規表現として使用してください:$ regex = '((?:[az] [az \\。\\ d \\ - ] +)\\(?:[az] [az \\ - ] +))(?![\\ w \\。]) '; – Stefan

関連する問題