iT邦幫忙

0

抱歉,問題很難下標題,再請看內容了,謝謝

  • 分享至 

  • xImage

小弟用php與jquery做了一個自我學習英文的網站,如下圖
https://ithelp.ithome.com.tw/upload/images/20200116/20105312FdzoixGmsw.jpg

因為句子中有些英文單字不認識,希望將不認識的英文單字新增進資料庫後,
以後只要句子中出現這個字,系統便能自動判斷此字已有在資料表中,
滑鼠點按後就可以出現它的解釋,效果如以下兩個效果皆可以
一、https://penghu.info/OB1F10AF08C936E984B5
在這個網站中,有些詞會自動跑出紅色底線,代表資料表中有相關的連結
二、https://bootstrap.hexschool.com/docs/4.2/components/tooltips/
或者如bootstrap中的「工具提示」效果

想不出太好的做法,請益各位高手前輩。

看更多先前的討論...收起先前的討論...
fillano iT邦超人 1 級 ‧ 2020-01-16 09:26:13 檢舉
這個需求有點像wiki
我覺得你要走行銷,這標題讓很多人忍不住,包含我
zzhsu20 iT邦新手 5 級 ‧ 2020-01-16 11:30:56 檢舉
不是走行銷也不是要商業化,純粹我個人想要完成人生的一個目標~通過英檢中高級而寫來當工具學習用的。而標題是真的想不出明確易懂的主旨,才會下如此標題,如果造成困擾,先說聲抱歉。
sion iT邦新手 4 級 ‧ 2020-01-16 14:58:20 檢舉
上面大大的意思是你寫程式太可惜了,你應該走行銷這條路
(我也是忍不住點進來的哈哈哈
olen iT邦新手 5 級 ‧ 2020-01-17 08:20:25 檢舉
+1 ... orz....
踏雪尋梅 iT邦研究生 5 級 ‧ 2020-01-20 15:30:23 檢舉
被標題吸引進來 +1 ...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

5

我不知道你是否了解所謂的「bb code」的應用。就先當你不了解。

所謂bbcode的應用。就是文章內容內有特殊的字段。會自動轉義成另一種模式。

[url=http://xxx.xxx.xxx]

在輸出到頁面會轉譯成

<a href=http://xxx.xxx.xxx>http://xxx.xxx.xxx</a>

在了解以上的情況。其實你的問題就大致上可以解決了。
大多數而言,關鍵字搜尋我還會搭配全文索引的模式來做定義處理。這是另外一門學問,我就先不教了。

一般來說,我會用如下的程式碼處理。

<?php
$getData = (從資料庫取出資料);
foreach($getData AS $_d){
    $s[] = $_d['key'];  //準備要比對的key
    $c[] = '<span class="txtkey">'.$_d['data'].'</span>'; //準備要轉換的內容
}
$txt = (取得內容);
str_replace($s,$c,$txt);

也就是說,將關鍵詞取出後做取代成我要的東西。一般來說,我會直接包span。方便處理css跟連結控制。

zzhsu20 iT邦新手 5 級 ‧ 2020-01-16 11:39:43 檢舉

謝謝「浩瀚星空」兄的解惑,
所以$getData是要先從資料庫中取出所有的英文單字,然後在每一個頁面的文字載入時,再將內容進行str_replace比對與取化?

是的,我是外行人,只是純粹喜歡程式,還真不懂bbcode與全文索引的概念,繼續精進。

那你會有點跳級了喔。

全文索引是為了降低搜尋及比對詞做處理的。
你總不可能每一次要將所有的關鍵詞都拿出來比對吧。
如果關鍵詞達10萬以上,那會死人的。

所以一般會先借用一下全文索引的特性取出可以比對及取代的關鍵詞。再做取代處理的。
只是全文索引這一堆又是另外一門學問就是了。講解出來會講三天三夜也說不完的。
(ps:「全文索引」....騙人,用一秒就說完了)

小魚 iT邦大師 1 級 ‧ 2020-01-16 20:02:50 檢舉

我花了2秒 XD

2
fillano
iT邦超人 1 級 ‧ 2020-01-20 09:44:05

為了好維護以及效能考量,不太建議在輸出結果時做這樣事情。我反而建議在資料庫設計跟程式都要考慮:

  1. 在table中設計兩個欄位,一個放你輸入的內容,一個放處理過的內容。頁面讀取的都是處理過的內容,除非內容沒東西。
  2. 在輸入後,先存進資料庫,然後用一個非同步的程序跑搜索跟輸入文字的處理(直接把關鍵字加上html tag或是加上bbcode之類)
  3. 如果有需要另外寫一個批次處理的程式,把資料庫裡面的東西一次處理。如果新增了字彙,你就會需要這樣做。

這樣做的理由:

  1. 比較不影響輸入資料的順暢,不用等程式處理完才知道東西有存進去系統
  2. 容易進行內容更新,只要針對輸入做處理,不需要管各種tag怎麼去parsing
  3. 安全:自己可以在頁面輸入bbcode、甚至html tag是一件很比較危險的事情。只允許輸入無任何標記的文字,然後用程式處理會比較安全。

我要發表回答

立即登入回答