[英]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.