0
我想檢查一個textarea。如果用戶在textarea中輸入一些鏈接,php應該自動標記鏈接。我使用此代碼:在PHP中的正則表達式/ find「<a></a>」
$message = "text with some link within";
$url = '@(?!<a[^>]*?>)(http)?(s)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])(?![^<]*?</a>)@';
if(preg_match($url, $message) == 1){
$message = preg_replace($url, '<a href="http$2://$4" target="_blank" rel="nofollow" title="$0">$0</a>', $message);
}
的問題是,當已經有一個標籤的鏈接(用「A」標記),正則表達式被破壞的鏈接。
下面是一個例子:
從textarea的第一個輸入:你好.... test.com
通過正則表達式改變:Hello ... <a href="http://test.com" target="_blank" rel="nofollow" title="test.com">test.com</a>
這是工作的罰款,但如果你更新此:
Hello ... http://test.com" target="_blank" rel="nofollow" title="test.com" target="_blank" rel="nofollow" title="test.com">test.com">test.com">test.com
感謝您的幫助!
在問題標題中,您需要定期檢查,並將其與URL-s進行匹配。你需要哪一個? :)你想在一個HTML代碼或原始文本搜索? – Peter
不要使用正則表達式來解析HTML,請使用像DOMDocument這樣的DOM解析器庫。 – Barmar
正如你在示例中看到的,我正在尋找一種方法來僅標記沒有附帶標籤的鏈接......最大的問題是,如果我再次編輯帖子,正則表達式將標籤添加到之前的標記,所以最後鏈接根本不起作用 –