網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術
論壇幫助 社區 日曆事件 今日新文章 搜尋

回覆
 
主題工具
  #1  
舊 2005-08-23, 09:31 AM
sea0964 sea0964 目前離線
進階會員
 
註冊日期: 2005-04-08
住址: www.deal13.net
文章: 479
發送 MSN 消息給 sea0964 發送 Yahoo! 消息給 sea0964
預設 找一個能將特定文字替換成link的javascript

不知道有沒有這種東西, 可以把網站上的特定文字改成特定的link.
比方說有域名, 或是domain的字樣, 就自動改成link link到domainclub.org

本來我是去改xoops裡面編輯器的設定, 等於是跟bbcode一起執行, 可是會跟現成的bbcode相衝突, 如果在link或圖檔檔名裡面有domain字樣, 也會被替換成link, 造成url跟img等bbcode出問題
想來想去, 可能用javascript可以做成外掛, 等php把網頁產生出來以後, javascript再把顯示出來的文字替換成link, 這樣就不會跟bbcode衝突
今天找了一整天, 還是沒有找到類似的東西, 不知道這邊有人知道
回覆時引用此篇文章
  #2  
舊 2005-08-23, 12:09 PM
wmh wmh 目前離線
進階會員
 
註冊日期: 2004-08-27
文章: 310
預設

你可以用 regular expressions 找出 domain 的字串,然後以連結語法取代掉,可參考:

http://www.regular-expressions.info/...ptexample.html
回覆時引用此篇文章
  #3  
舊 2005-08-23, 01:58 PM
monkey 的頭像
monkey monkey 目前離線
進階會員
 
註冊日期: 2003-12-16
文章: 1,972
預設

sea0964兄..
您要的是這樣嗎? http://tk.38.com/forum/index.php/topic,85.0.html
__________________
回覆時引用此篇文章
  #4  
舊 2005-08-24, 03:05 AM
sea0964 sea0964 目前離線
進階會員
 
註冊日期: 2005-04-08
住址: www.deal13.net
文章: 479
發送 MSN 消息給 sea0964 發送 Yahoo! 消息給 sea0964
預設

wmh兄給的link我看了, 不過我是要自動取代
monkey兄那個就是我要的效果,
不過這應該是去改bbcode的地方吧, 我試過了,
如果[url]或[img]的bbcode 裡面的link也有這些字樣, 會出包:P
所以才會想說看javascript能不能外掛來處理, 變成輸入時php先處理好bbcode,
顯示出來後java再處理一次文字
不知道這個想法可不可行..
回覆時引用此篇文章
  #5  
舊 2005-08-24, 03:56 AM
wmh wmh 目前離線
進階會員
 
註冊日期: 2004-08-27
文章: 310
預設

其實 bbcode 也是用 regular expressions 去做的。而不論是用 javascript 或用 php 來處理,單純的文字取代都是很容易出問題的,用 regular expressions 就可以幫你比較準確去判斷,不過仍會有限制。

我還不是很清楚你要的東西,你是要把固定的字串取代成連結嗎?還是把類似 dn 的字串都改成連結?

固定字串取代成連結的話,也是需要給條件的,例如字串前後都是接空白字元時,才轉成連結,否則,如果有其他字串內包著你要轉的字串時,還把那個字串也分解掉,這樣就做錯了。

若是要把類似 dn 的字串都轉成連結的話,很多程式內建的 bbcode 都會有這樣的功能,像 vbb 就會把開頭是 http:// 的字串轉成連結,可直接參閱這些程式原始碼。
回覆時引用此篇文章
  #6  
舊 2005-08-24, 04:38 AM
sea0964 sea0964 目前離線
進階會員
 
註冊日期: 2005-04-08
住址: www.deal13.net
文章: 479
發送 MSN 消息給 sea0964 發送 Yahoo! 消息給 sea0964
預設

我想要的是像某些廣告商的contextual text link廣告, 這邊有個例子:
http://www.managedlinks.com/resources.php
圖一的有底線的Search Engine Optimization連結事實上不是網站本身就帶的連結, 而是廣告商的link, 當滑鼠移到link上時, 會變成圖二, 網站本身並沒有把那幾個字加link或做效果, 只是加了一段廣告商的程式碼, 就自動會把關鍵字加上link及效果, 我想要的就是這種東西(不用有那個說明, 我只要link).

這樣我就不用考慮跟bbcode相衝突的問題
回覆時引用此篇文章
  #7  
舊 2005-08-24, 09:40 AM
wmh wmh 目前離線
進階會員
 
註冊日期: 2004-08-27
文章: 310
預設

嗯,瞭解了,以固定的字串取代為另一個字串,大致是這樣吧?我寫了一個簡單的程式如下:
代碼:
<script>
var keywords = Array(
  Array("Google AdSense", "http://ads.google.com/"),
  Array("clicking", "http://click.to/"),
  Array("advertisers", "http://advertisers.com/")
)

function replaceKeyword(objID) {
  var text = "";
  if (objID != null) {
    text = document.getElementById(objID).outerHTML;
  } else {
    text = document.body.innerHTML;
  }
  for (var i = 0; i < keywords.length; i++) {
    var re = new RegExp(keywords[i][0].replace(/\s+/, "\\s+"), "g");
    var m = re.exec(text);
    if (m != null) {
      for (var j = 0; j < m.length; j++) {
        var reg = new RegExp(m[j], "g");
        text = text.replace(reg, "<a href='" + keywords[i][1] + "'>" + m[j] + "</a>");
      }
    }
  }
  if (objID != null) {
    document.getElementById(objID).outerHTML = text;
  } else {
  	document.body.innerHTML = text;
  }
}
</script>
使用時,在 <body> 內加一段語法來執行
代碼:
<body onload="replaceKeyword('websiteContent')">
帶入的參數可以沒有,或是帶入某個元素的 ID。

程式最上面的地方可以設定關鍵字及要填入的網址,如果關鍵字內有空白,我在搜尋時會用 \s+ 取代,\s+ 表示一個以上的空白、跳行、定位等等...這樣遇到斷行的關鍵字時才能有效判斷,完整的網頁範例,看原始碼可知道效果:

http://65.98.116.226/~wmh/
回覆時引用此篇文章
  #8  
舊 2005-08-24, 10:29 AM
sea0964 sea0964 目前離線
進階會員
 
註冊日期: 2005-04-08
住址: www.deal13.net
文章: 479
發送 MSN 消息給 sea0964 發送 Yahoo! 消息給 sea0964
預設

多謝wmh兄,
剛剛把它加到我的xoops裡面
我是加到佈景的theme.html檔裡面
上面那一段加到</head>上面
然後把<body>改成第二段
可是似乎不work, 不知道是啥問題?
http://www.deal13.net/
直接檢視原始檔的話可以看到這一段code沒問題, 可是實際去討論區test, 還是不work,
我現在還把code留著沒改,
還有一個問題, 如果是要忽略大小寫, 像是不管Google google GOOGLE都要替換的話要加啥?
還是每一個都要手動加?
回覆時引用此篇文章
  #9  
舊 2005-08-24, 10:35 AM
wmh wmh 目前離線
進階會員
 
註冊日期: 2004-08-27
文章: 310
預設

<body onload="replaceKeyword('websiteContent')">

你要把 websiteContent 改成你要取代的元素(某個table 或 td 或 div) 的 ID
或者整個 body 都要取代的話,用:

<body onload="replaceKeyword()">

大小寫不拘的話,改:
var re = new RegExp(keywords[i][0].replace(/\s+/, "\\s+"), "g");
new RegExp(m[j], "g");
為:
var re = new RegExp(keywords[i][0].replace(/\s+/, "\\s+"), "i");
new RegExp(m[j], "i");
即可
回覆時引用此篇文章
  #10  
舊 2005-08-24, 10:38 AM
wmh wmh 目前離線
進階會員
 
註冊日期: 2004-08-27
文章: 310
預設

你試試看能不能起作用,另外我原本的想法是字串前後都要留空白(或換行、小數點等等)才取代為連結,但是忘了加這一段,如果你使用上有問題我再來改,也就是當你有個字串是 test@Dreamhost.com 時,其中的 Dreamhost 會被取代為連結,這樣就怪怪的了。
回覆時引用此篇文章
回覆


發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼



所有時間均為 +8。現在的時間是 06:27 AM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.