查看完整版本: 關於正規表示法URL超連結及圖片顯示
頁: [1]

n652585 發表於 2016-10-14 12:17 AM

關於正規表示法URL超連結及圖片顯示

本帖最後由 n652585 於 2016-10-14 12:23 AM 編輯

大家好~
關於標題的問題,我在網路上有搜尋一些解答
目前我是使用這個方法:
<?php
// 將字串中的網址加入超連結
function parseURL($strURL = null)
{
$regex = "{ ((https?|telnet|gopher|file|wais|ftp):[\\w/\\#~:.?+=&%@!\\-]+?)(?=[.:?\\-]*(?:[^\\w/\\#~:.?+=&%@!\\-]|$)) }x";

return preg_replace(
$regex,
"<div class='locked'>下載: <em>訪客無法瀏覽下載點,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>",
$strURL);
}
echo ParseMsg('http://www.php.net');
?>

可以把網址用成可以點的超連結,但我最近想要貼上圖片的網址
例:http://i.imgur.com/XXXXXX.jpg
是可以顯示出這個網址的超連結,但我希望可以直接顯示出圖片出來
所以我自己改了上面的一小段:
<img src=\"$1\" target=\"_blank\">
但發現只能顯示圖片啊!!!! 哈哈
而且對正規表示完全無法理解...
所以想請問大家,要怎麼顯示網址的超連結和遇到圖片的網址時可以直接顯示圖片呢?
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

theloserbm 發表於 2016-10-14 11:53 AM

本帖最後由 theloserbm 於 2016-10-14 11:53 AM 編輯

你的正規表示法後面需要加上偵測圖片的部分

一般用法可以用檔名的後綴去判斷, 如jpg/jpeg/png/gif等等
比較安全的做法是把檔案下載下來然後用裡面的資料來判斷, 不過就會吃掉一定的頻寬和時間

我小改了你的regex, 加入了後綴擷取, 但是移除了positive lookup的部分, 你看看有沒有弄壞了甚麼.
((?:https?|telnet|gopher|file|wais|ftp):(?:[\\w/\\#~:.?+=&%@!\\-]+?)(?:\\.(\\w+))?$)
測試網站: https://regex101.com/r/oPjtJi/2 (必須把雙斜線換成單斜線)

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

n652585 發表於 2016-10-15 12:33 AM

謝謝你~
但是...我不知道要怎麼運用耶...
如果說直接換上你幫我改的部分
那下面<div class='locked'>下載: <em>訪客無法瀏覽下載點,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
的部分要怎麼改呢?

真的很抱歉我還不太會..

theloserbm 發表於 2016-10-16 01:23 AM

你現在用的是preg_replace, 拆開用preg_match來做就可以了preg_match($regex, $strUrl, $matches);

if (count($matches) >= 3 && in_array($matches, ['jpg', 'png', 'gif'...])) {
  $output = "<img src="...
}
else {
  $output = "<a href="...
}

n652585 發表於 2016-10-16 10:19 PM

好~~
非常謝謝你~~
我再研究研究一下XD
再次感謝你~~{:52:}<br><br><br><br><br><div></div>
頁: [1]