簡體   English   中英

用PHP修改超鏈接

[英]Modify hyperlinks with PHP

我使用正則表達式將博客評論中的URL轉換為可單擊的超鏈接。 但是,我也想做相反的事情:

由於我允許某些html標簽(但不允許<a> ),因此如果有人鍵入超鏈接,我想將其更改為:

<a href="http://www.example.com">My Link</a>

進入

我的鏈接http : //www.example.com

生成的代碼是:

<p><b>My Link:</b> <a href="http://www.example.com" rel="nofollow">http://www.example.com</a></p>

謝謝!

試試這個。

function find_links($url){
    $pattern = '/<a (.*?)href="(.*?)\/\/(.*?)"(.*?)>(.*?)<\/a>/i';
    $url = preg_replace_callback($pattern, 'process_links',$url);
    return $url;
}

function process_links($m){
    return "{$m[5]} <a href=\"{$m[2]}//{$m[3]}\" rel=\"nofollow\">{$m[2]}//{$m[3]}</a>";
}

$links = find_links('<a href="http://www.example.com">My Link</a>');

編輯:糟糕! 我沒有完全回答OP的問題。

用正則表達式解析不規則語言是通往失敗的捷徑。 改用正確的HTML解析器

您只需要搜索www或http,然后轉換該文本,直到到達URL空格為止。

Something like:
    $startPos = strpos( $input, "http" );
    $endPos = strpos( $input, " ", $startPos );
    $urlText = substr( $input, $startPos, $endPos - $startPos );

我想我有點想念您的問題...與上述類似,但正在尋找。

好吧,如果您不介意一些CSS(以及瀏覽器的實現差異):

a {font-weight: bold; }
a:after {content: " (" attr(href) ") "; }

盡管可以在顯示鏈接文本時不會刪除該鏈接,但應該可以部分實現您的目標。 所以,真的我猜不是。 抱歉...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM