php
  • html
  • regex
  • hyperlink
  • 2017-04-21 111 views 0 likes 
    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 
    

    感謝您的幫助!

    +0

    在問題標題中,您需要定期檢查,並將其與URL-s進行匹配。你需要哪一個? :)你想在一個HTML代碼或原始文本搜索? – Peter

    +0

    不要使用正則表達式來解析HTML,請使用像DOMDocument這樣的DOM解析器庫。 – Barmar

    回答

    0

    我對PHP並不熟悉,也許這不是一個好的URL驗證模式,但重點是如果已經有一個「a」標籤,文本不會被替換。

    <?php 
    
        $message = array(
         'Hello ... <a href="http://test.com" target="_blank" rel="nofollow" title="test.com">test.com</a>', 
         "Hello .... http://www.test.com ..." 
        ); 
    
        $url = '@(<a[^>]*>[^<]+</a>|((https?://)?[\w\.-]+\.[a-zA-Z]{2,3}[^\s\W]*))@'; 
    
        foreach ($message as $msg) { 
    
         preg_match($url, $msg, $matches); 
    
         if(preg_match($url, $msg) == 1 && count($matches) > 2) { 
    
          $msg = preg_replace($url, '<a href="$0" target="_blank" rel="nofollow" title="$0">$0</a>', $msg); 
    
         } 
    
         echo $msg.PHP_EOL; 
    
        } 
    
        // Output: 
        // Hello ... <a href="http://test.com" target="_blank" rel="nofollow" title="test.com">test.com</a> 
        // Hello .... <a href="http://www.test.com" target="_blank" rel="nofollow" title="http://www.test.com">http://www.test.com</a> ... 
    

    希望它有幫助。

    相關問題