簡體   English   中英

如何在PHP中用鏈接和標簽替換純文本URL

[英]How to replace plain text URLs with links and hashtags in PHP

我正在嘗試將純文本轉換為鏈接,主題標簽和@tags。 我已經部分地做到了這一點,但是找不到區分標簽和包含哈希的鏈接的任何方法。

我是使用regex的新手,所以可能有點混亂!

//link
$message = preg_replace('/((http(s)?)(\:\/\/)|(www\.))([a-zA-Z0-9_\-\.\/\&\%\?\=\+\#\:\;\~\[\]\!\,\@\$\'\(\)\*]+)/', '<a href="http$3://$5$6">$0</a>', $message );
//handle
$message = preg_replace('/[@]+([A-Za-z0-9-_]+)/', '<a href="#$1">$1</a>', $message );
//hashtag
$message = preg_replace('/[#]+([A-Za-z0-9-_]+)/', '<a href="#$1">$1</a>', $message );

純文本根據需要轉換為鏈接,然后在哈希點中斷。

所需文字:

www.hello.com/about_us/test%20page/test-page.php#header?this=12345&that=YES

實際文字:

頭?這= 12345&那= YES“> www.hello.com/about_us/test%20page/test-page.php#header?this=12345&that=YES

在將哈希轉換為哈希標簽之前,是否有任何方法可以檢查哈希是否是URL的一部分?

您的主題標簽正則表達式是這樣的:

/[#]+([A-Za-z0-9-_]+)/

您聲明的目標是確保它不是URL的一部分,您可以通過以下方式識別URL:

/https?\:\/\//

您可以嘗試使用負向后看:

/(?<!https?\:\/\/)[^#]*[#]+([A-Za-z0-9-_]+)

對於所有一般情況而言,這還不夠,但是聽起來您正在嘗試在您控制的范圍內解決問題(您擁有的文本文件或其他內容),因此希望對您有所幫助。

一個對我有用的解決方案:

$message = preg_replace('/^(?<!http)^(?<!www\.)[#]+([A-Za-z0-9-_]+)/', '<a href="#$1">$1</a>', $message );//#hashtag

暫無
暫無

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

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