:::

用Zotero輸出中文、英文不同的APA參考文獻:我的碩士論文參考文獻製作過程

用Zotero輸出中文、英文不同的APA參考文獻:我的碩士論文參考文獻製作過程

image

雖然我使用Zotero來管理參考文獻的書目資料,但是在撰寫論文的時候一定會碰到一個問題:要怎麼區別中文跟英文的書目?大部分系所對於參考文獻的要求都會希望將「中文文獻」與「英文文獻」分開列表、各自有不同的輸出樣式,但是對Zotero來說並沒有中英之分,只能使用同一種樣式來處理。這對於剛接觸Zotero的人來說是非常地困擾,甚至有人提出了中文用Zotero、英文用EndNote的這種作法,但我個人並不喜歡將文獻分散於多個軟體,造成難以管理的困擾,所以我仍堅持用Zotero來實作中英文不同的參考文獻。

要用Zotero做到這點,其實手續非常多,不見得是一個很理想的作法。但不論如何,還是比不使用書目管理軟體、呆呆地手動輸入還來得快得多就是。


作法概述

這邊我以自己寫論文時使用中英文不同的APA格式的作法為例子,介紹整個的作法。安裝Firefox與Zotero以及額外需要使用的中文APA等資訊,請參考我之前寫的中文APA。這一篇是從這些環境已經配置好、也蒐集好必備的書目資料為前提,主要描述從撰寫正文及指定引用文獻開始,到最後整理參考文獻的作法。必須要強調的是,關於中文書目的輸入書目作法,還請參考中文APA的說明及APA規範來仔細檢查、整理,畢竟有乾淨的書目資料才能有漂亮的參考文獻格式。

步驟大致上分成三個階段,

  1. 撰寫正文前的準備
  2. 正文中的引用
  3. 參考文獻的整理與輸出

作法有點繁瑣,以下一一敘述。


步驟1. 撰寫正文前的準備

image

安裝好Zotero並建立了許多可以用的書目格式之後,現在我們要利用Microsoft Word 2007來撰寫一篇文章。在開始撰寫正文之前,我們先配置一下Zotero的相關設定。

1. 開啟增益集中的Zotero選項

image

Zotero並沒有獨立的工具列,而是包含在「增益集」裡面。

2. 選擇引用文獻樣式

image

請點選倒數第二個選項「Zotero Set Doc Prefs」。

image

這是Zotero很大的一個缺點:一份文件只能用一種樣式。而這也是這一篇文章想要解決的一個問題。

此處我們先選擇「American Psychological Association 6 th Edition」(APA),因此之後正文中的引用會以英文APA的方式顯示,而中文的書目就必須手動修改。

接下來,我們就可以開始寫正文了。


步驟2. 正文中的引用

正文中有參考到文獻的地方,都必須在正文中標示引用。這不僅是給予作者尊重,也是在最後整理參考文獻列表的重要步驟。我都是在寫作的同時,一條一條地加入引用,在撰寫正文的同時一併處理。

利用Zotero在正文中引用的情況很多變化,在這邊我舉出六種不同的引用狀況,以及各自需要修改、調整的地方來說明。

1. 英文,顯示作者

image

我寫了一段話「標註共識的構想是來自於社群指引支援(Social Navigation Support)的概念」,而我想要再這句話後面標註這是來自Dieberger等人的文章。

image

此時先將游標放在要插入引用的位置,然後點下Zotero工具列的「Zotero Insert Citation」。

image

找到你要引用的這篇文章,然後按下右下角的「確定」。

image

現在引用已經順利插入了。這是Zotero最基本的用法,不需要任何其他的修改動作。

2. 英文,不顯示作者

image

現在我寫了一段話:「閱讀理解策略中最有名的莫過於Robinson提出的SQ3R」,而我想要在「Robinson」後面標示這是引用自1970的文章。

作法一樣是將游標放在「Robinson」後面,也就是要插入引用的地方,然後開啟「Zotero Insert Citation」。

image

在「新增/編輯引用文獻」的對話視窗中,這次要勾選右下角的「不顯示作者」,然後按下「確定」。

image

這樣子插入的引用就只會顯示年份。

3. 中文,顯示作者

image

現在我寫了一段教育研究者提出的三種模式,引用自王瓊珠與陳淑麗的書本。

通常這個引用我會放在「句號」前面,所以此時將游標放在句號前,再開啟「Zotero Insert Citation」。

image

找到要引用的文獻之後,按左下角的「顯示編輯器」按鈕。

image

這邊會顯示Zotero預設要插入的格式:「(王瓊珠 & 陳淑麗, 2010)」。因為我們一開始選擇用的是英文APA,所以括弧、逗號等標點符號都是半型表示。這邊就只能手動進行修改。

image

將符號改成全型,再將「&」改成「、」,就成了叫為合適的:「(王瓊珠、陳淑麗,2010)」。這樣子再按下「確定」輸出即可。

image

輸出之後的樣子如上圖。

4. 中文,不顯示作者

image

現在我又引用了王瓊珠與陳淑麗的書本內容,這次我把他們的名字寫出來了,所以接著引用中我只需要表示年份即可。

確定游標的位置在作者名字後面,然後開啟「Zotero Insert Citation」。

image

這次一樣勾選「不顯示作者」,然後打開編輯器,將半型的括弧「(2010)」修改成全型的括弧「(2010)」,然後按下「確定」輸出。

image

這樣就完成了。

5. 中文,多重來源,顯示作者

image

這邊我寫了一段話:「許多學者不斷改進他們的方法,而提出了各種不同的閱讀理解策略」,此處的「許多學者」是引用來自多篇不同的文獻,而引用的方式也比較複雜。

一樣先將游標放在要標示引用的地方,然後開啟「Zotero Insert Citation」。

image

基本上,Zotero預設只能選擇一個來源,但他也提供了「多重來源」的模式,方便一次引用多個文獻來源。請按下左下角的「多重來源」來切換到多重來源模式。

image

接著右方會出現多重來源的列表。這時候你就可以來找你要引用的文獻,並按右方箭頭「→」圖示來將它加入列表中。

image

接著打開編輯器來調整。Zotero會聰明地依照作者名字排序,但是標點符號依然要從半型轉換成全型:「(王化龍, 1991; 林乾義、關爾嘉,2002;柯華葳,2009;馬沙諾,2003;廖仁武,1998;劉明兆、余德慧,1982)」。修改完之後再按下「確定」輸出。

image

完成。

6. 中英多重來源,顯示作者

最後必須要提醒的是中英多重來源的情況,我的論文中並沒有出現這種資料,所以在此我根據「學術論文寫作:APA規範」一書來說明。

如果同時引述中文與英文文獻時,需注意以下事項:

  • 最外為的括弧仍是以「全型」為主
  • 先引證中文文獻之作者與年代,再引述英文文獻之姓氏與年代
  • 兩者之間應以全型之分號「;」分隔
  • 年代宜統一以西元年代呈現
  • 中文文獻之標點符號一律以「全型」輸入,英文文獻之標點符號則以「半型」輸入

舉例:

  • (張保隆,2005;Chang, 2003)
  • 相關研究(張保隆、謝寶煖,1996;謝寶煖,1997;Chang & Hsieh, 1993, 1996; Good, 1990)

詳細的細節,還是請參考「學術論文寫作:APA規範」喔。

因為需要注意的事項頗多,Zotero無法聰明地幫你區分中文跟英文,所以這部份一樣得用編輯器慢慢修改才行。


步驟3. 參考文獻的整理與輸出

image

寫完正文之後,參考文獻的引用應該也差不多了。接下來,我將說明到底如何將這些參考文獻分成中文與英文兩種。

1. 輸出參考文獻列表

image

在正文最後,也就是預定插入參考文獻的地方,使用Zotero的「Zotero Insert Bibliography」功能。

image

Zotero會幫你在正文中引用的文獻彙整出一個列表,按照作者排序。這個列表就是你文章寫到最後全部引用的所有文獻了。

2. 為所引用的文獻加上標籤

接下來我們為這篇正文所引用的文獻加上「標籤」。因為這次我要寫的是碩士論文,所以我的標籤定為「2011碩士論文」。

image

對照參考文獻列表,回頭去找尋Zotero中的文獻。上圖中,我找到了引用的「讀寫新法」,並在「標籤」欄位中幫該文獻加上了「2011碩士論文」的標籤。

這個手動的步驟儘管很麻煩,但標籤只要1. 複製 2. 貼上 3. enter就能加入,其實挺快就能處理完畢。

3. 儲存英文文獻的搜尋結果

幫這篇正文被引用的文獻都加上標籤之後,我們就能用進階搜尋快速地製作參考文獻列表。

image

在Zotero面板的工具列中,打開放大鏡圖示的「進階搜尋」。

image

搜尋條件設定兩個:

  1. 標籤、是、2011碩士論文
  2. 語言、不含有、zh_

條件1能夠找出標籤是「2011碩士論文」的文獻,而條件2則是過濾掉英文文獻的作法,稍後再敘述這個用意。

image

搜尋出來的結果,請按「儲存搜尋」。

image

為存留搜尋命一個名稱:「2011碩士論文 英文文獻」。

image

這樣Zotero就會幫你把搜尋結果儲存起來。

image

接著再檢查一下這個清單裡面是否有參入中文文獻。如果有的話,則幫此文獻的語言加入正體中文「zh_TW」或簡體中文「zh_CN」的資料。

4. 儲存中文文獻的搜尋結果

image

接著來建立中文的參考文獻。作法一樣是使用進階檢索,搜尋「標籤 是 2011碩士論文;語言 含有 zh_」的結果,並儲存搜尋成為「2011碩士論文 中文文獻」。

image

這樣子就建立好中文與英文兩個參考文獻的列表了。

5. 由搜尋結果建立參考文獻

有了中文與英文兩個列表之後,接下來就以不同引用文獻樣式輸出參考文獻列表。

image

先做中文文獻的列表。在中文文獻的存留搜尋上按右鍵,選擇「由存留搜尋來建出參考書目」。

image

接著選擇引用文獻樣式。由於是中文的參考文獻,所以就選擇我自己做的American Psychological Association in Pulipuli中文APA樣式吧,同時選擇「複製到剪貼簿」,最後按下「確定」。

image

再來到Word中「貼上」,就完成中文參考文獻的輸出。

image

接著再用同樣的步驟來輸出英文文獻,只是這次的引用文獻樣式要選用英文的「American Psychological Association 6th Edition」。

image

然後貼到Word中,完成輸出。一開始由Zotero建立的中英混雜參考文獻列表則已經可以移除了。

最後還要檢查一下Zotero輸出的格式是否正確。中文APA輸出時需要注意多作者的「、等」之類的問題,詳細請看這篇的說明


結語:如果還要修改參考文獻的話

步驟3強烈建議等到論文都定稿了再來處理。然而在這個工程做完之後,如果未來因為修改內文而刪增參考文獻的話,則只要把文獻的標籤做增減即可。這種作法不能全自動地偵測、判斷,的確是Zotero力有未逮之處。希望未來他還能夠繼續改良。

在寫這篇文章的時候,我發現到有人設計了多語系Zotero (Multilingual Zotero),我想改天再來試試看這究竟能不能改善Zotero這方面的問題,希望他可以。

如果有更好的方案,也請大家多多建議喔。

(more...)

Zotero引用文獻樣式之中文APA

Zotero引用文獻樣式之中文APA

image

Zotero是一個依賴Firefox的文獻書目管理套件,用來協助管理文獻、快速輸出學術文獻使用的引用樣式。我在之前做過介紹Zotero功能的投影片,而網路上也可以找到很多Zotero的相關介紹,而我個人也是用Zotero來寫作論文、管理參考文獻。

比較遺憾的是,Zotero基本上是以英語語系國家為主,因此引用文獻樣式中大多也都是英文為主的樣式。儘管Zotero有提供Zotero Style Repository並有非常多種的引用文獻樣式,但卻仍沒有看到專屬於中文,特別是我自己在使用的中文APA樣式。

值得慶幸的是,Zotero允許使用者自行設計csL(Citation Style Language)的樣式檔,因此我參考了張保隆與謝寶煖的「學術論文寫作:APA規範」與hiroshi yui建立的CSL,修改出一份「American Psychological Association in Pulipuli」來使用。經過數篇文章的測試與修改之後,目前此版本已經算是勉強堪用,但Zotero對於資料處理仍有極限,因此仍有需要手動修改的地方。

這一篇我將要介紹在Zotero中安裝「American Psychological Association in Pulipuli」(以下簡稱中文APA)的方法,然後補充仍須手動修改的細節,供使用Zotero的中文使用者利用。


Zotero與中文APA安裝

Firefox安裝

Zotero是基於Firefox瀏覽器的一個套件,因此在使用之前必須先安裝Firefox。雖然現在Firefox 4已經出來了,但習慣上我仍以Firefox 3為主,而且我偏好喜愛可攜版的Firefox Portable。

Zotero安裝

Zotero是以套件的方式安裝在Firefox中。

 

此外,如果要整合到OpenOfficeLibreOffice或Microsoft Word的話,仍需要安裝整合增益集。增益集非常依賴Zotero套件的版本,要更新Zotero的時候,請務必跟增益集一起更新喔。

以下是適用於Zotero 2.1的版本

中文APA安裝

最後是安裝中文APA,首先先下載這個檔案:

image

然後開啟Firefox,把這個檔案拖曳到Firefox視窗中,如上圖。

image

Firefox會問你是否要更新現有樣式,按下確定。

image

這樣就安裝完囉,你以後就可以在選擇引用文獻樣式時選用「American Psychological Association in Pulipuli」囉。以下我會再更詳細地介紹使用方法。


中文APA的使用

儘管Zotero在管理書目上已經幫了很大的忙,但實際上在使用時仍有許多細節需要調整。Zotero的操作基本上分成三大步驟:「輸入書目」、「調整書目」、「輸出書目」,而由於輸出書目的成果仍有需要手工調整的地方,所以我加上第四個步驟「輸出後書目調整」。以下就這四大步驟,一一介紹使用中文APA的細節。

步驟1. 輸入書目

Zotero的特色是可以從各個網站輸入文獻的書目。我找期刊文獻時常用Google Scholar(學術搜尋),找書本書目時則是用OCLC的WorldCat.org

由於Google Scholar實在是太好用,還能夠結合政大圖書館的OPAC,所以幾乎都能用Google Scholar來找到要引用的文獻資料。以下我以Google Scholar找尋「專題式學習小組溝通行為與成員角色之研究」這一篇期刊文章為例子,說明Zotero要怎麼輸入書目。

1. 開啟Zotero面板,選擇「收集」

image

安裝好Zotero之後,就可以在Firefox的狀態列下看到「zotero」的圖示,如上圖所示。點開之後就可以打開Zotero面板。

image

Zotero的書目管理都是透過這個面板來完成,例如語系切換、編輯書目資料、管理「收集」等等。

其中,我會使用「收集」(collection)功能來管理書目資料,他的功能跟「資料夾」、「目錄」的概念差不多。例如我在寫論文時,會將書目資料依章節存入「Chapter 1 緒論」、「Chapter 2 文獻探討」等不同的收集。你可以點選面板左上角的「黃色資料夾與+號圖示」來使用「新增收集」的功能,如上圖所示。

此例中,我建立了一個[TEMP]收集。待會就是將書目存入這個收集中。

2. 開啟Google Scholar搜尋結果

image

在安裝好Zotero,打開Google Scholar並搜尋「專題式學習小組溝通行為與成員角色之研究」之後,就會出現上面的網頁。請先確認一下搜尋結果是否出現了要找的文章,此例中我們要找的文章就是第一個結果。

image

網址列右方出現了「黃色資料夾」的圖示,這是Zotero的輸入功能按鈕,請點下此按鈕。

image

接著Zotero會請你選取要輸入的項目,我們就勾選要加入的「專題式學習小組溝通行為與成員角色之研究」吧。

image

然後就能看到Zotero的[TEMP]收集中出現該篇文章了。

步驟2. 調整書目

image

由於Zotero跟Google Scholar是英文語系國家為主的系統,在中文上有些地方需要調整。以下介紹的書目資料調整設定都是在Zotero面板中的「資訊」版面中進行。

1. 英文首字字母大寫規則(sentence case)

雖然這邊是在講中文APA,但是偶爾也會遇到英文題名、作者、期刊等資料的情況,所以英文首字字母大寫、其餘均小寫的規則仍是要注意的。

Zotero雖然有簡單的大小寫規則判斷,但它卻沒有辦法幫你判斷「專有名詞」。所以中文APA的設定是以輸出書目資料中的原始樣貌為主。我列出常見需要調整的部份,其餘細節請參考「學術論文寫作:APA規範」一書吧。

  • 標題、副標題、作者:首字字母大寫、其於均小寫。但是標題跟副標題中的專有名詞則依慣例首字字母大寫。
  • 期刊刊名:應列全稱,英文刊名每個字的第一個字母均大寫(冠詞、介係詞除外)
2. 統一書名副標題的分隔副號「:」

image

Zotero並沒有區分標題中的副標題。在圖書館的編目規則中,標題與副標題是以冒號作為區隔。英文的區隔是用半型冒號「:」並左右各空一格,中文則是用全形冒號「:」而左右不留空格。

常常會有人用橫線「」來分隔副標題,但圖書館編目規則會將之改成冒號,「學術論文寫作:APA規範」一書也是以冒號「:」來處理。

再提醒一下,如果題名是英文,標題是首字的第一個字母大寫,其餘均小寫。副標題也是第一個字母大寫,其餘均小寫。但是專有名詞則依慣例首字字母大寫。

3. 中文作者轉成單一欄位

image

雖然中文作者也是有姓名之分,但是在書目輸出時一般都是連名帶姓一起顯示,所以此處不應將中文作者名字區分成姓名雙欄,而作者名字應該保持在同一欄位。

image

Zotero在作者欄位提供了「兩個欄位」與「單一欄位」的格式。兩個欄位是預設值,可以填入姓跟名,適合填入英文作者;一個欄位則沒有姓名之分,適合機構或中文作者的全名。在作者欄位後面有個小方塊可以做「切換成單一欄位」或「切換成兩個欄位」的功能。

image

修正之後的作者姓名資料如上圖所示。

對了,團體作者應該用全稱,例如:「國立政治大學」,而非「政大」。

4. 「論文」的類型與大學

image

在撰寫論文時,同學們很常引用國內博碩士論文的資料。Google Scholar雖然找得到博碩士論文,但是匯入Zotero的格式並不正確,請務必手動調整。

  • 項目類型:改成「論文」
  • 類型:依照博士論文、碩士論文以及出版或位出版而有不同。常見的是「未出版之碩士論文」
  • 大學:要寫上大學全名以及系所全名
  • 所在地:大學的所在地。

未來有機會的話,我會考慮寫個博碩士論文網的Zotero解析匯入器,或是調整Google Scholar的匯入器功能看看吧。

5. 書頁的分隔線轉成半型的「-」

image

Google Scholar在輸出書頁時,書頁中間辨識起始頁數與最後頁數的分隔線是以全型的「–」來表示,上圖的例子中就是「137–164」。但是實際上應該仍是以半型的「-」表示即可。所以這部份也是要手動修改成「137-164」。

image

直接點選該欄位就可以進行修改了。

6. 刪除版本「初版」

image

APA中,初版是不需要註明的。但是Zotero並無法區別什麼是「初版」,因此輸出時會直接顯示。

如果匯入Zotero時版本是「初版」,我建議將此資料刪除。僅有二版或特訂版本才需要註明。

7. 加上語言「zh_TW」

image

這是一個區分中英參考書目的小技巧。你可以在「語言」欄位中加入表示正體中文的「zh_TW」,未來在輸出書目時,就能夠很明確的知道他到底是屬於中文參考文獻還是英文參考文獻。

語言欄位的值我是參考ISO 639ISO 3166所組成,前兩或三個字母是語言代碼(維基百科列表),後兩或三個字母是國家和地區代碼(完整列表)。

常用的有臺灣使用的正體中文「zh_TW」跟中國大陸使用的簡體中文「zh_CN」。

對於Zotero解析器不足的看法

Zotero雖然可以用解析器簡單地從資料庫中匯入書目資料,但如上面所述,通常還是需要經過許多加工,書目資料看起來才比較完整。

研究生2.0認為沒有辦法直接使用漂亮的書目資料實在是Zotero的一大缺點,但我個人則是覺得這有點強人所難。畢竟每個人撰寫文章的格式本來就很難統一,短期內應該還沒辦法解決這問題。

因此在此步驟中我提出了很多需要修正的地方,其實也只要修正這一次,接下來輸出之後幾乎就可以直接使用。請繼續往下看看到底怎麼操作吧。

步驟3. 輸出書目

Zotero輸出書目的方式主要有兩種,在撰寫文章時會用整合到編輯器的方式,而臨時使用時也可以直接從Zotero輸出書目資料。以下我介紹後者的方法。

image

在Zotero面板中,在要匯出的書目或「收集」按下右鍵,選擇「從選取的項目來建立參考書目…」。

image

建立參考書目對話視窗中,選擇「American Psychological Association in Pulipuli」,輸出格式則是先「複製到剪貼簿」。

3. 貼上到文件中

image

接著在Microsoft Word之類的文件編輯器中使用「貼上」,你就可以看到輸出的書目了。

許喬雯、岳修平、林維真(2010)。專題式學習小組溝通行為與成員角色之研究。圖書資訊學刊8(1),137-164。

以HTML輸出的樣式如上,其實還有行距跟凸排的樣式,不過這邊就看不到了。

步驟4. 輸出後書目調整

「專題式學習小組溝通行為與成員角色之研究」這個項目剛好是比較沒有問題的,但是有些特殊情況下輸出的書目就需要調整。大部分的修正都可以用編輯器中的「尋找與取代」功能來進行字串的替換。

1. 7位以上多作者的「等」

洪儷瑜、陳淑麗、王瓊珠、方金雅、陳美芳、張郁雯、等(2007)。中文閱讀診斷工具臨床驗證性研究。教育部委託專案報告

這是Zotero以中文APA預設輸出的樣式,但是其中「、等」是錯誤的,應該修正為「等」。

洪儷瑜、陳淑麗、王瓊珠、方金雅、陳美芳、張郁雯等(2007)。中文閱讀診斷工具臨床驗證性研究。教育部委託專案報告

修正結果如上所示。

如有發現其他需要修正的地方,請大家踴躍告訴我吧。能從Zotero修正的我就用Zotero修正,不能的話我就寫在這邊做個記錄。


中文APA輸出展示

最後我用Zotero的中文APA列出幾種常見的中文書目資料作為展示,讓大家看看到底Zotero中文APA輸出的格式會是如何吧。只是在此看不出「行距」、「首行凸排」的樣式,但至少標點符號跟斜體都還算正確囉。

以下各別列出「正文中的引證」與「參考文獻」兩種不同的輸出格式,資料都有按照上述方法調整過,不一定是照著原始資料庫輸入的格式。

期刊的文章

(褚麗娟、黃剛銘、蔡坤哲,2004)

褚麗娟、黃剛銘、蔡坤哲(2004)。網路虛擬社群激勵機制之研究。出版與管理研究1(1),61-78。

會議論文(研討會論文)

(王瓊珠、洪儷瑜、陳秀芬,2007)

王瓊珠、洪儷瑜、陳秀芬(2007)。低識字能力學生識字量發展之研究:馬太效應之可能表現。特殊教育研究學刊32(3),1-16。

(博碩士)論文

(陳勇汀,2011)

陳勇汀(2011,3月)。合作式閱讀標註之知識萃取機制研究。未出版之碩士論文,臺北市:國立政治大學圖書資訊與檔案學研究所。

書籍

(Eric Freeman、Elisabeth Freeman,2005)

Freeman, Eric、Freeman, Elisabeth(2005)。深入淺出設計模式(蘇秉豐編,蔡學鏞譯)。臺北市:歐萊禮。

這一個例子是有編輯跟翻譯者的狀況。至於分隔英文作者名稱是要用頓號「、」還是英文的comma「, 」似乎尚未有定論,在此是以頓號「、」為主。

報告

(洪儷瑜 等人,2007)

洪儷瑜、陳淑麗、王瓊珠、方金雅、陳美芳、張郁雯、等(2007)。中文閱讀診斷工具臨床驗證性研究。教育部委託專案報告

必須要注意的是,這是一個作者人數為7人的書目。因此就如上面所說的,請手動將正文引證的「 等」改成「等」、參考文獻中的「、等」改成「等」。修正之後如下:

(洪儷瑜等,2007)

洪儷瑜、陳淑麗、王瓊珠、方金雅、陳美芳、張郁雯等(2007)。中文閱讀診斷工具臨床驗證性研究。教育部委託專案報告

網頁

第一次引用(林從一、羅竹芳、黃俊儒、陳志銘,2008)

第二次引用(林從一 等人,2008)

林從一、羅竹芳、黃俊儒、陳志銘(2008)。全國通識課程資料庫。全國通識課程資料庫。上網日期:2008年12月17日,檢自:http://get.nccu.edu.tw/getcdb/

這是一個作者為4人的例子。在中文APA的正文引證中,3到5人的書目,第一次引用時顯示全名,而第二次引用時只需要寫出第一位作者即可。因此上例中我列了兩次正文中的引用,你也會發現到又出現「 等人」的字樣,記得手動修正一下。


修改CSL的心得

中文APA是一個以XML寫成的Citation Style Language (CSL)檔案,如果了解CSL語法的話,大致上你也可以改出你想要的輸出格式。而Simple Style Generator這網站更是把CSL的設定以簡單易懂的HTML表單來呈現,即使你不懂CSL語法也能夠輕易地寫出你想要的規格。

但是CSL並不是一個很完整的程式語言,因此他的限制也非常地多。最麻煩的就是沒有字串的比對、搜尋、替代功能,頂多只能判斷資料的有無。如果Zotero能夠用比對字串的話,就可以實作中英文相容的文獻格式。如果能夠搜尋與取代字串的話,副標題的分隔也就不需要手動修改。

此外還有一些微妙的限制,像是「 等」前面一定會有空格或分隔符號「、」。我研究了老半天還是找不到修改的方法,所以只能在輸出之後手動修改。

而且Zotero許多欄位都無法用於CSL中,特別是判斷語系用的「語言」欄位,這也造成中英文參考書目在處理上的困難。我會在之後繼續討論這個問題的解決方案。

結語

儘管Zotero在解析器與引用文獻樣式輸出上仍有許多不盡人意的地方,但作為一個免費且開放的書目管理工具,Zotero仍然是十分優秀。儘管我的瀏覽器已經都已Chrome為主,但就是因為有Zotero的緣故,所以我電腦上還是常駐著Firefox。

這一份CSL檔是我在寫論文時開始建構,然後再之後二篇研究計畫中不斷地改進,到寫這篇blog時仍花了一些時間來調整,最後結果就是這樣了。應該還是會有許多錯誤,希望好心人士可以將發現的錯誤回報在下面的留言,讓我們一起來改進中文APA的樣式吧。 (more...)

Zotero語系切換套件:Zotero Bibliography Locale Switcher

Zotero語系切換套件:Zotero Bibliography Locale Switcher

image

Zotero預設安裝時是使用Firefox的語系,如果你是用中文,則他會用中文語系。如果你使用的引用文獻樣式並不是為中文設計的,那麼輸出的格式會非常奇怪。因此我們要Zotero的時候,要根據文獻的格式來調整語系。

about:config的調整方法

研究生2.0的「Zotero文獻格式改成英文」介紹了如何設定Firefox的about:config參數來修改Zotero的語系,但現在有更簡單的套件可以使用:Zotero Bibliography Locale Switcher

Zotero Bibliography Locale Switcher用法

安裝Zotero Bibliography Locale Switcher之後,就能夠從Zotero的設定介面中來調整。

image

請點開這個齒輪。

image

接著就可以從列表中的「Language」選單中,再選擇要使用的語系。因為我安裝中文版的Firefox,所以語系只有中文跟英文。

image

套件會提示你重新啟動Firefox才會生效。

image

你可以搭配QuickRestart套件,就能夠在Firefox的「檔案」選單中使用「重新啟動Firefox」囉。

(more...)

Windows一鍵執行SSH指令:AutoIT、Pietty搭配使用

Windows一鍵執行SSH指令:AutoIT、Pietty搭配使用

image

Linux的命令列畫面讓很多人惟恐避之不及,這對有許多指令需要依賴SSH連線、並在命令列輸入才能執行的DSpace來說,無疑是一大門檻。在此我提出一種可以做到「一鍵指令」的方案:利用AutoIt自動執行機器人,透過PieTTY的命令列模式,用ini設定檔來設定連線參數,來執行捷徑所指定的指令的作法。

這種作法對資安來說非常不理想,僅是一個簡便利用的應急方案而已。


一鍵指令的背景與目的

我現在要做的事情是:

  1. 在Windows的環境下
  2. 透過SSH連線到Linux伺服器
  3. 進行登入動作(以及金鑰確認)
  4. 然後執行一個指令。

而這個方案的目的是將使用者的操作簡化到極限,我希望使用者能夠以滑鼠執行一個檔案,就自動做完上述的所有動作。

一鍵指令方案概述

簡單來說,這個方案的作法是:

  1. 利用PieTTY的命令列模式來輸入登入資訊與要執行的指令
  2. 以ini檔案儲存登入資訊
  3. 在Linux伺服器端配置參數與接收命令的sh腳本
  4. 利用AutoIt來處理連線的細節
  5. 利用Windows的捷徑與捷徑後輸入的參數,將參數輸入給AutoIt

Linux環境配置

要做到這些事情,需要Linux伺服器端與Windows使用者端的環境一起配置才行。這邊先敘述Linux的部份,大致上是要做以下三件事情:

  • 建立帳號、密碼
  • 開啟ssh連線
  • 建立ssh-cmd.sh腳本

Linux伺服器建立帳號、密碼、開啟ssh連線等基本操作請參考鳥哥的Linux思房菜。在此最重要的是要配置接收來自客戶端指令的執行腳本「ssh-cmd.sh」。

在本篇的例子中,我以普通使用者「dspace」跟管理者「root」作為帳號、「password」作為該帳號的密碼來說明。

ssh-cmd.sh:執行指令腳本

因為帳號是使用「dspace」,所以我在「/home/dspace/ssh-cmd.sh」(SkyDrive備份)這個位置建立起腳本。腳本的內容如下:

#!/bin/bash
# Program:
#       Excute command and pause at finish.
## History:
## 2009/11/12    Pudding   First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export JAVA_HOME=/usr/java/jdk1.6.0_06
export PATH
export LC_ALL=en_US
export JAVA_OPTS="-Xmx128M -Xms64M -Dfile.encoding=UTF-8"

ANT_HOME=/opt/apache-ant-1.7.0
JAVA_HOME=/usr/java/jdk1.6.0_06
CATALINA_HOME=/opt/apache-tomcat-6.0.16
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ANT_HOME/bin:$PATH:/opt/apache-maven-2.0.9/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC JAVA_HOME ANT_HOME CATALINA_HOME


if [ "$1" == "/home/dspace/tomcat_restart.sh" ]; then
        at now + 0 minutes < $1
        echo "Tomcat will restart now."
else
        $1
fi

echo ""
echo "====================================="
echo ""
read -p "Please press ENTER to exit. " doExit

這個腳本中設置了相當多參數,請依照你伺服器的實際情況來決定要設置的參數內容。

此外,由於Tomcat的重新啟動無法直接透過這樣的指令來執行,所以我改成以「at」執行一次的方式來執行。必須說明的是,這並不是很理想的作法,有待以後改善。

tomcat_restart.sh:重新啟動Tomcat伺服器腳本

如果你沒有需要重新啟動Tomcat的話,這個步驟是可以省略的。「/home/dspace/tomcat_restart.sh」(SkyDrive備份)是用來重新啟動Tomcat伺服器的腳本,內容如下:

export JAVA_HOME=/usr/java/jdk1.6.0_06
export JAVA_OPTS="-Xmx128M -Xms64M -Dfile.encoding=UTF-8"

/opt/apache-tomcat-6.0.16/bin/shutdown.sh 
sleep 1
/opt/apache-tomcat-6.0.16/bin/startup.sh 

要記得將這些腳本的執行權限開啟,他們才能正常地執行。

Windows使用者端配置

你現在需要在Windows中建立一個資料夾,例如「c:\ssh-cmd\」,然後把以下的檔案放進去:

PieTTY的命令列執行方式

雖然很多人都知道PieTTY是用來作SSH連線的,但是知道PieTTY可以透過命令列與指令檔案來進行連線並執行指令的人就不多了,其實這是基於PieTTY改編自PuTTY原始就有的功能喔。

具體來說,利用命令列來透過PieTTY連線的作法如下:

pietty0327.exe -l [ID] -P [PORT] -pw [PASSWORD] -m [COMMAND] -t [HOST]

裡面的參數中:

  • [ID]是要登入的帳號
  • [PORT]是連接埠
  • [PASSWORD]是密碼
  • [COMMAND]是「存放指令的檔案位置」,注意,不是指令,只是檔案位置喔
  • [HOST]要連線的主機IP
config.ini:連線配置

連線的配置資訊,我將它存放在「config.ini」中。「config.ini」的內容如下:

[ssh-dspace]
login=dspace
pw=password

[ssh-root]
login=root
pw=password

[ssh]
port=22
host=127.0.0.1

在此安排了兩種不同的身分,一種是以普通使用者「dspace」來執行,另一種是以管理者「root」來執行。除了重新啟動伺服器等重大指令之外,一般指令最好是以普通使用者「dspace」的身分來執行會比較安全。

ssh-cmd.exe:執行連線腳本

由於要執行指令必須要以存放在檔案中的形式來執行,所以建立這個檔案、並指引PieTTY來連線的工作,是交給AutoIt的自動腳本ssh-cmd.exe來執行。

ssh-cmd.exe是由ssh-cmd.au3編譯而來的,這是AutoIt的程式語言。內容如下:

Dim $user = "ssh-dspace"
Dim $script = ""
If $CmdLine[0] == 2 Then
	$user = "ssh-" & $CmdLine[1]
	$script = $CmdLine[2]
ElseIf $CmdLine[0] == 1 Then
	$script = $CmdLine[1]
EndIf

Dim $login = IniRead("config.ini",$user, "login", "root")
Dim $pw = IniRead("config.ini",$user, "pw", "password")
Dim $port = IniRead("config.ini","ssh", "port", "22")
Dim $host = IniRead("config.ini","ssh", "host", "127.0.0.1")

If $script == "" Then
	MsgBox(0, "錯誤", "請指定要執行的指令")
	Exit
EndIf

Dim $doExcute = MsgBox(1, "提示","您確定要在伺服器中執行以下命令嗎: " & $script)
If $doExcute == 2 Then
    Exit
EndIf

Dim $sh = "cmd.sh"
Dim $scriptHeader = "~/ssh-cmd.sh "

$file = FileOpen($sh, 2)

; Check if file opened for writing OK
If $file = -1 Then
    MsgBox(0, "錯誤", "無法開啟檔案")
    Exit
EndIf

FileWrite($file, $scriptHeader & $script)
FileClose($file)

Dim $cmd = "pietty0327.exe -l " & $login & " -P " & $port & " -pw " & $pw & " -m " & $sh & " -t " & $host
Run($cmd)
Sleep(1000)
If WinActivate("PieTTY Security Alert") Then
	WinActive("PieTTY Security Alert")
	Send("{ALTDOWN}Y{ALTUP}")
EndIf

這個腳本做了幾件事情:

  1. 接收來自外部的「身分」與「指令」參數(稍後建立Windows捷徑的時候,我會再說明怎麼輸入這邊的參數)
  2. 讀取來自config.ini中的連線資訊,包括「帳號」、「密碼」、「伺服器位置」、「連接埠」
  3. 過濾指令、顯示提示
  4. 將指令寫入「cmd.sh」檔案中
  5. 以命令列執行PieTTY連線
建立Windows捷徑

image

接著要建立到「ssh-cmd.exe」的捷徑,並且在捷徑之後加上「參數」。建立好ssh-cmd.exe並改好名字之後,你可以打開捷徑的「內容」,在「目標」的欄位中設定參數。

舉例來說,我現在要在伺服器上以「dspace」身分執行「/home/dspace/tomcat_restart.sh」的指令,那麼目標裡面的設定如下:

"C:\ssh-cmd\ssh-cmd.exe" dspace /home/dspace/tomcat_restart.sh

目標的值除了指定要執行的程式位置之外,還指定了要執行的身分「dspace」跟要執行的指令「/home/dspace/tomcat_restart.sh」。如此配置之後,就能夠讓使用者直接點選此捷徑,讓他自動執行這些動作了。

你可以利用這個例子舉一反三,建立執行不同身分、不同指令的捷徑,並組成一個操作列表,讓使用者易於選擇。也可以將此捷徑放到「開始」程式集裡面,讓使用者更容易執行各種操作。這些動作我是用InnoSetup在安裝時自動配置而成,不過那又是另一番長篇大論了。


結語

儘管一鍵指令的方案我研究了很久,但是仍有很多不完美之處,希望高手能多多指教。

其實這個是DSpace-DLLL寫書的一部分技術內容。之前寫完書之後就匆忙地投入其他事情中,到最近在使用AutoIt時,又把之前寫的檔案挖出來看。

這時候就會覺得這個Blog對我來說也是很重要的,如果沒有這些記錄,我恐怕很快就會忘記自己之前做過的事情了吧。

(more...)

CentOS中自動啟動Tomcat的亂碼問題

CentOS中自動啟動Tomcat的亂碼問題

image

如果要架設以Java、JSP、Sevlet系列伺服器端程式語言為主的網頁伺服器,Apache Tomcat(簡稱Tomcat)是相當有名的一套解決方案。我研究DSpace時也是使用Tomcat來架設在CentOS作業系統上。

因為Tomcat並不是CentOS內建服務而是我額外安裝的,所以我設定了crontab讓他在開機時自動執行。由於之前的參數沒有配置完善,導致開機自動執行Tomcat時,讓Java讀取檔案的編碼發生錯誤。

研究了老半天終於找到算是可行的解決方案,在這邊記錄一下。

Tomcat啟動腳本規劃考量

安裝好Tomcat之後,一般是以命令列執行[tomcat]/bin/startup.sh ([tomcat]表示Tomcat的安裝目錄),但是如果要以自動啟動的方式來啟動Tomcat,卻會因為沒有先執行/etc/profile中設置Java的參數,而會造成啟動失敗。

/etc/profile中的Java參數

先回顧一下DSpace安裝步驟裡,在/etc/profile設置Java參數的內容:

JAVA_OPTS="-Xmx2048M -Xms2048M -Dfile.encoding=UTF-8"
ANT_HOME=/opt/apache-ant-1.7.1
JAVA_HOME=/usr/java/jdk1.6.0_12
CATALINA_HOME=/opt/apache-tomcat-6.0.13
CLASSPATH=$CATALINA_HOME/common/lib/servlet-api.jar
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ANT_HOME/bin:$PATH:/opt/apache-maven-2.0.9/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC ANT_HOME JAVA_HOME CATALINA_HOME CLASSPATH

其中很重要的是「JAVA_HOME」跟「JAVA_OPTS」這兩項參數。前者是要告訴Tomcat要執行的Java環境必要的套件位置,後者則是執行Java時的參數設定。

Tomcat啟動腳本

如果要自動啟動Tomcat的話,則必須在腳本中加入Java參數設定才行。我建立了一個「/home/dspace/tomcat_startup.sh」的腳本,內容如下:

export JAVA_HOME=/usr/java/jdk1.6.0_12
export JAVA_OPTS="-Xmx2048M -Xms2048M -Dfile.encoding=UTF-8"

/opt/apache-tomcat-6.0.16/bin/startup.sh

這個腳本執行了三件事情:

  1. 設置JAVA_HOME變數為「/usr/java/jdk1.6.0_12 」
  2. 設置JAVA_OPTS變數為「-Xmx2048M -Xms2048M -Dfile.encoding=UTF-8」
  3. 執行「/opt/apache-tomcat-6.0.16/bin/startup.sh 」以啟動Tomcat

如果你也要依樣話葫蘆的話,記得要調整一下這些參數的設定喔。

Tomcat解決亂碼的爭議點

上面在設定JAVA_OPTS的時候,有一個「Dfile.encoding=UTF-8」的編碼參數,這個設定可以讓Java知道要以UTF-8的編碼來開啟檔案,以免他用預設的en_US編碼來處理而造成UTF-8看起來像是亂碼一樣。

但是網路上大部分論壇都主張要將此參數設置在[tomcat]/bin/catalina.sh中,或是一樣在catalina.sh中設定「CATALINA_OPTS=-Dfile.encoding=UTF-8」。前者因為Tomcat版本相差過遠,我找不到要修改的地方;後者還沒試過。

總之,「Dfile.encoding」的參數應該還是有很多其他的地方可以配置,如果大家有更好的方法,也請提出來多多討論吧。

在crontab中開機自動執行Tomcat啟動腳本

開機自動執行的方法有很多種,其中crontab也可以在開機時指定要執行的程式。crontab是Linux中執行例行性工作排程的好用工具,詳細的原理可以參考鳥哥的介紹。以下我僅敘述如何將「/home/dspace/tomcat_startup.sh」加入crontab開機時自動啟動的腳本中。

1. 進入crontab編輯畫面

輸入「crontab -e」就可以進入編輯畫面了。

[dspace@dspace-dlll ~]$ crontab -e
2. 加入開機執行指令

crontab編輯畫面會以一般的vi文字編輯器形式出現,如果你對vi編輯器不熟的話,還是得先請你看一下鳥哥的操作說明。請在crontab檔案最後加入以下設定:

# Startup tomcat
@reboot /home/dspace/tomcat_startup.sh

第一行只是註解。

第二行的「@reboot」參數表示在重新開機時都會執行後面的指令:「/home/dspace/tomcat_startup.sh」。

儲存並離開之後就完成crontab的設定。

3. 重新啟動測試

設置好crontab之後,別忘了reboot重新啟動來測試一下Tomcat是否有自動地啟動喔。


結語

這個編碼問題讓我煩惱了好久。一開始我還以為是Sevlet或JSP在傳送request的時候編碼設定錯誤,沒想到最後居然是根本上的Java編碼就出了問題。希望這次設定完之後,以後不要再出現編碼的問題了啊。

(more...)

AutoIt使用Run()執行非exe, bat等執行檔

布丁布丁吃布丁

AutoIt使用Run()執行非exe, bat等執行檔

image

這次來記錄一下AutoItRun()函數的另類用法。

Windows的腳本機器人AutoIt

AutoIt是一個執行於Windows環境的腳本機器人,我以前就用AutoIt製作過VirtualBox的自動安裝程式,之後我偶爾也會用AutoIt來幫我排程處理例行事務,省下我自己動手的功夫。

Run()函數以命令列指令執行

有時候我會需要AutoIt去執行外部程式,這可以藉由它內建的Run()函數來執行。但是AutoIt的Run()函數預設只能執行exe、bat、com、pif,如果參數中的程式不是這些類型,那麼Run()下去就不會有任何反應。

這時候可以以「命令列」(console)的方式來處理,請使用以下的指令:

Run(@ComSpec & " /c " & 'commandName', "", @SW_HIDE)

commandName可以替換成你要執行的程式路徑。要注意到" /c "前後是有空格的喔。

開啟絕對位置檔案

舉例來說,我希望AutoIt自動幫我開啟一個網頁程式「c:\index.html」的話,指令要這樣寫:

Run(@ComSpec & " /c " & 'c:\index.html', "", @SW_HIDE)
開啟與腳本相同位置的檔案

如果我要開啟與腳本相同位置的檔案,則可以利用「@ScriptDir」。舉例來說,「index.html」擺在跟AutoIt腳本(或是編譯過的執行檔)相同的目錄之中,則可以利用以下指令來執行「index.html」:

Run(@ComSpec & " /c " & 'index.html', @ScriptDir, @SW_HIDE)

結語

其實這個作法已經寫在Run()函數的網頁說明中,但傻傻的我還是google了好一段時間才發現,在此留下一個記錄。

另外也有人主張用ShellExecute()函數來開啟。以後有機會我再研究看看好了。

(more...)

GReader Folder Favicon Alerts

GReader Folder Favicon Alerts

image

這是修改自GReader Favicon Alerts的userscript,可以在Google閱讀器(Google Reader, GReader)的網頁圖示(favicon)上顯示「目前所在資料夾」的未讀訊息。

原始的GReader Favicon Alerts是顯示所有訂閱的未讀訊息。但我並不會時常盯著所有訂閱訊息,而只會想要關注特定幾個訂閱,並將他們歸類在同一個資料夾中。

GReader Folder Favicon Alerts可以讓你只顯示目前閱讀資料夾的未讀訊息。你可以開啟很多個Google閱讀器、閱讀不同資料夾,這支程式就會幫你把各個資料夾的未讀訊息顯示在網頁圖示上,方便你追蹤最新的訊息。

至於userscript的安裝方式,請參考虫二的[教學]如何讓不同的瀏覽器正確安裝並執行使用者腳本 (Userscript)

(more...)

Plurk網頁圖示未讀記數器

Plurk網頁圖示未讀記數器

12004551472

這支userscript是我參考GReader Favicon Alerts修改而成,可以在Plurk圖示上顯示未讀訊息的數量。


Google Chrome的固定分頁

Google Chrome的「固定分頁」是一個節省分頁導覽列空間的好功能。他將分頁的寬度縮小到只剩下圖示,並固定在分頁導覽列的左方,讓我們保持一些常常需要查閱的網頁。

我常常會將Plurk固定在Chrome中,但是又常常會想切換到Plurk看一看有沒有「未讀訊息」,久而久之就覺得這個切換的動作很麻煩。所以就想要參考GReader Favicon Alerts的方式,在Plurk圖示上加上未讀訊息的記數。

安裝方法

這個程式只能用在Google ChromeFirefox等有支援userscript的瀏覽器上,IE是沒有支援的。

至於userscript的安裝方式,虫二的[教學]如何讓不同的瀏覽器正確安裝並執行使用者腳本 (Userscript)已經有很詳細的教學,在此不再介紹。

(more...)

將圖片編碼成字串:MIME與Base64編碼

將圖片編碼成字串:MIME與Base64編碼

如果要編寫一個圖文並茂的網頁,往往會覺得要找一個可以擺放「圖片」的空間是一件很麻煩的事情。特別是最近我在學習寫userscript的時候,想把套件跟圖片顯示結合在一起,又得要考慮怎麼連結圖片,感到非常頭大。

後來參考了GReader Favicon Alerts的寫法,我才知道原來還有將圖片轉換成Base64編碼,然後直接跟純文字的HTML或JavaScript結合在一起的作法!(備註:IE6不行喔)


MIME

根據維基百科的記載

多用途網際網路郵件擴展MIMEMultipurpose Internet Mail Extensions)是一個網際網路標準,它擴展了電子郵件標準,使其能夠支持非ASCII字元、二進制格式附件等多種格式的郵件消息。

MIME是由[type]/[subtype]組成。常見的[type]有「text」、「image」、「application」。我們在寫作網頁時,常常看到「image/png」、「text/html」、「text/javscript」之類的格式,這就是MIME喔!

網路上常見的圖片MIME則是「image/jpeg」、「image/gif」跟「image/png」。

Base64編碼

根據維基百科的記載

Base64是一種使用64基的位置計數法。它使用2的最大次方來代表僅可列印的ASCII 字元。這使它可用來作為電子郵件的傳輸編碼。在Base64中的變數使用字元A-Z、a-z和0-9 ,這樣共有62個字元,用來作為開始的64個數字,最後兩個用來作為數字的符號在不同的系統中而不同。

圖片是屬於二進制的檔案,因此不能像HTML或JavaScript這種純文字(plain text)的程式一樣地處理。

image

舉例來說,上圖中,我以處理純文字的筆記本開啟「1422855-medium2.gif」這個檔案,看到的結果是一堆亂碼。也就是說,一般的純文字處理器是無法處理圖片這種二進制的檔案。

而透過電腦將圖片轉換成Base64編碼之後,資料會成為由英文跟數字組成的純文字資料,如下所示:

這一張圖片的大小為2.01KB,轉換成Base64編碼之後共有2753字元。儘管檔案大小變大了,但這種Base64編碼卻能更方便地使用。

如何將圖片轉換成Base64編碼?

image

很多程式語言都可以做到將圖片轉換成Base64編碼的工作,而網路上也有許多提供這種服務的網站,例如Binary File to Base64 Encoder / Translator

操作步驟也很簡單,只要指定圖片的網址,然後就可以取得Base 64編碼了。

1. 指定網址

image

輸入後按右邊的「提交」(submit)。

2. 取得編碼結果

image

這個網站會自動地加入MIME格式。你可以注意到除了Base 64編碼之外,開頭還有「data:image/gif;base64,……」的檔頭訊息。

如何利用圖片的Base 64編碼?

不知道有沒有人發現到,開頭這張圖片,其實就是用MIME與Base 64編碼來顯示的喔。

作法一樣是用<img>標籤,但裡面的src屬性卻是指定MIME與Base 64的資料內容。我將程式碼的部份擷取如下:

<img src="data:image/gif;base64,R0lGO……ZTVsGBAA7">

一般的src屬性通常是指定「http://」開頭的網址,但在此卻是使用「data:image/gif;base64,」開頭的MIME與Base 64編碼,而瀏覽器卻也能正常地開啟。

IE6不支援

image

好吧,舊時代的產物IE6並不支援MIME與Base 64編碼顯示圖片的作法就是了。使用的時候請自己注意一下喔。

以MIME與Base 64編碼儲存圖片的好處

將圖片轉換成這種純文字的方式儲存有幾個好處:

  1. 一份圖文並茂的文件不用切割成很多份檔案(通常是一份html與數張圖片檔案),全部只要用MIME與Base 64編碼來儲存在一份HTML檔案即可。
  2. 對userscript這種JavaScript的套件來說也是如此。我只要把圖片的MIME與Base 64編碼寫在JavaScript中,就不需要外連,就像是GReader Favicon Alerts一樣。
  3. 以MIME與Base 64展示的圖片被視為「同網域」,不會受到「跨網域」的限制,因此就可以做到利用MIME與Base 64圖片再來加工繪圖的功能。

結語

學到這種作法之後,我的網頁設計跟AJAX應用又開拓了一條廣闊的道路。在此也將這種喜悅分享給大家,一起努力學習吧!

(more...)