2010/10/27

[jQuery] 在 jQuery 中處理 single/double quote

在透過 jQuery 設定標籤中的內容時, 有時會遇到內容中已經有單引號(') 或雙引號(") 的問題.
例如: 從資料庫抓出了如下的一段 HTML 碼
<b><font color="#FF0000">This is a test</font></b>
接著透過 jQuery 的 .html() 將該資料設定至指定的一個 <div> 內:
<div id="divMsg"></div>
<script type="text/javascript">
$("#divMsg").html("${msg}");
</script>
此時, 因為原本的 msg 變數中已經有雙引號存在, 所以若實際檢視輸出的 HTML 原始碼, 就會是以下的內容:

2010/09/14

[JavaScript] 在<select>中替換<option>的方式(KB 276228)

在網頁的設計中, 常會用到連動式的下拉式選單, 或是因為某個事件, 而置換掉下拉式選單中的選項.
但在 Microsoft 官網有提到一個問題: http://support.microsoft.com/kb/276228/zh-tw 
也就是, 不要用 innerHTML 去置換 <select> 中的 <option>.

2010/08/19

[HTML][CSS] 使用 HTML <table> 匯出 Excel 時的斷行 (<br/>) 處理

在網頁的應用上, 有時我們會用 HTML 的 <table> 包裝要匯出的資料, 並設定匯出的檔案是 Excel.
例如在 HTTP Header 中利用 Content-disposition 讓使用者下載指定的檔案:
Content-Disposition: inline; filename=data.xls
不過有人會以為在 <td> 中加入 <br/> 會讓資料在 Excel 的儲存格中換行. 結果實際並不是這樣.

2010/08/18

[C#][Java] Excel 日期欄位的數值轉換

在 Excel 中, 如果將儲存格的資料設定至 "日期", 就可以輸入一個數字表示日期. (下圖)
儲存格格式
也因為 Excel 用數字表示日期, 所以有些 API 在讀取 Excel 裡的儲存格資料時, 會讀出一個數字的字串, 而不是一般預期的日期字串.

2010/08/06

[SQL Server] 查詢資料庫各資料表的權限清單

在做資料庫的管理事項中, 有時會需要列出資料庫中各個表格的權限清單, 以確認資料表的權限沒有被別人亂設定. 所以為了方便進行這樣的查詢作業, 以下參考一些 SQL Server 既有的 Stored procedure, 將其包裝成一個  SQL Script.
參考資源:

[Java] 修改 jForum 預設的 log 等級

最近在研究這一套 open source 的論壇, 一裝起來就發現有一些擾人的 java.sql.SQLWarning 跑出來.
例如:

[C#][Java] 處理讀取 XML 時發生的 The entity "xxx" was referenced, but not declared 例外

在XML的應用上, 有時會處理到一些無預期的資料, 例如以下的 sample:
<?xml version="1.0" encoding="UTF-8" ?>
<message>
  <from>yilin</from>
  <content>copyright &copy; 2008  Power by Test site</content>
<message>


[C#] XmlDocument 搭配 Linq 與 XPath

一般最常搭配 XML 用來查詢資料的技術是 XPath . 不過 .Net 僅支援到 XPath 1.0 , 有時想在 XPath 中加上日期函式的判斷都不行.
再加上若使用了 XPath 的函式或一些判斷式後, 整個 XmlDocument 的查詢效能會變慢. (參考以下的例子)
本文章所使用的 XML 內容 (ad.xml : 紀錄一些廣告圖與連結):

[Java] 客制化 JProgressBar 的進度條顏色

在論壇上看到一個這樣的需求:
  • javax.swing.JProgressBar 的顯示要包含五種顏色, 第一段(0~20%)紅色, 第二段(20%~40%)橙色, 第三段(40%~60%)綠色, 第四段(60~80)黃色, 第五段(80~100)藍色.
我的想法: 寫一個繼承 javax.swing.JProgressBar 的類別, 並複寫 paint() , 來達到此目的.

[C#] 從 MySQL 轉資料至 MS SQL Server (SqlBulkCopy)

使用套件: MySQL Connector/Net 6.1 (其他套件可以在此 下載)
因為是大量的資料搬移, 所以採用 .Net 2.0 的 SqlBulkCopy .
連線字串的部分可以到這個網站找: http://www.connectionstrings.com/.
以下是我使用的連線字串:

[C#] .Net Remoting 事件派送

過去使用 .Net Remoting 大多都只用到 [C#] .Net Remoting 基本說明 (使用 Interface 和 組態檔) 所述的架構.
不過 .Net Remoting 還有一種事件派送的架構, 就是讓 Client 可向 Server 註冊事件, 當 Server 有事件發生時, 再通知 Client. (大多都以聊天室為例子)
這樣的架構對我來說, 可以應用在派送網站資料 (包括: 圖檔, RSS 資料, 等).
假設現在網站供使用者訂閱的新聞 RSS 資料是放在資料庫裡, 而網站伺服器共有三台 (NLB).
若直接讓這三台網站伺服器各自從資料庫中讀取資料, 其讀取次數將會是 [網站數] * [RSS 頻道數] . (如果沒加入網頁快取機制, 可能要再乘上 [使用者連線數] )

[C#] .Net Remoting 基本說明 (使用 Interface 和 組態檔)

在說明 .Net Remoting 前, 先推薦 Ingo Rammer 的書: http://www.thinktecture.com/Resources/Books/default.html
我買的是 "Advanced .NET Remoting" 初版, 寫得蠻不錯的, 範例也說得很清楚.
本篇主要說明 .Net Remoting 基本的設計方式與建議的做法, 希望能讓初學者能有一個基本的設計概念, 並避免一些常見的錯誤.

2010/08/02

[C#] 用 iTextSharp 讀寫 pdf 檔中的 XMP (metadata) 資訊

由於工作上需要將 pdf 檔案依政府的要求, 將分類檢索的資訊加註於 XMP 中, 所以才會開始研究這部分.
不太懂分類檢索的人可以參考 此網頁 中的資訊.
開發工具與環境:

2010/07/30

[C#] 讀取圖檔中的 GPS 基本資訊

由於現在很多 Google Map 的應用, 主要用到圖片的 GPS 資訊不外乎緯度, 經度, 高度, 版本.
所以本篇僅說明如何利用 .Net 本身的 Library 從圖檔中取出這些資訊.
不過, 若圖檔本身未包裝這些資訊進去, 程式本身亦不可能讀到.
在說明如何取得這些資訊前, 請記得參考以下資訊:

[C#] 在 .Net 程式中呼叫 Java 的 Web Service

先前測過 Java 中呼叫 .Net 的 Web Service (here), 現在反過來, 在.Net 中呼叫 Java 的 Web Service.
環境說明:
  • Java 開發工具: Netbeans 6.5.1
  • Java Web Server: Tomcat 6.0.18
  • Java Web Service 套件: JAX-WS 2.1

[ASP.Net] Regular Expression 的密碼驗證

其實用 Regular Expression 做密碼複雜度的驗證已不是什麼創舉, 用 google 輸入關鍵字 "regular expression password" 就會有一堆參考.
由於 (?=) 和 (?!) 的用法之前有在 這篇文章 大略提過, 所以此篇就當做是為了避免自己忘掉, 且做為衍生應用寫的吧.

[Other] ADO Stream 的轉碼說明

一般在使用 AJAX 時, 會遇到回傳資料的中文亂碼問題.
不過, 因為網頁瀏覽器的安全性設定問題, 所以使用 AJAX 呼叫的頁面都是在同網域頁面.
也就是說, 呼叫的頁面是在開發者能掌控的範圍 (包括可修改).
因此, 許多網頁對於 AJAX 所呼叫的頁面傳回亂碼的解答, 就會是建議開發者去修改被呼叫頁面的 charset.

[ASP.Net] Session.IsNewSession 與 Session.SessionID

在微軟的 MSDN 中有 Asp.Net 的 Session 說明:
http://msdn.microsoft.com/zh-tw/library/system.web.sessionstate.ihttpsessionstate_members(VS.80).aspx
其中 SessionID 與 IsNewSessiont 的說明如下:
  • IsNewSession: 取得值, 指出工作階段是否以目前要求建立.
  • SessionID: 取得工作階段的唯一工作階段識別項.

2010/07/29

[SQL Server] 建立 SQL Server Express 的定期自動備份

在 SQL Server 的 Express 版本中, 沒有自動備份的功能可使用.
一般備份就分成兩種方式:
  1. 透過 Management Studio Express 進行手動備份.
  2. 自行撰寫 T-SQL 的 Script, 或是寫程式去呼叫 T-SQL 的備份指令, 進行資料庫備份.

[ASP] 設計 UTF-8 網頁的注意事項

過去很多人在撰寫中文網頁時, 常以 Big5 編碼做為顯示和資料儲存的編碼方式.
不過, Big5 能顯示的字集畢竟沒 UTF-8 多. 所以, 若要讓網頁可顯示更多的字(簡體中文, 日文等), UTF-8 編碼是不錯的選擇.
以下分別就資料庫, 前端網頁, 後端程式三個部分, 說明若要讓網頁顯示 UTF-8 編碼, 有哪些地方需要調整.

[Other] 讓 IE7 的 RSS 按鈕 On

有些人會以為 IE7 上面那個看起來像是 RSS 訂閱的按鈕, 是瀏覽器在閱讀 RSS 資料時會開啟, 然後讓使用者按下那個按鈕進行訂閱.
不過實際上, 那個按鈕是在 HTML 網頁 <head> 中有一個特定的 <link> 時才會開啟.
參考如下:

2010/07/28

[C# & Java] .Net 加密 (DESCryptoServiceProvider) VS. Java 解密

前言: 這邊只列出我工作上有遇到的情況, 並未對所有的加解密做很完整的舉例/說明.
        不過如果有人能提供其他情況, 我是可以試著去解看看.
情境: 在 .Net 中, 利用 DESCryptoServiceProvider 進行加密. 加密的 Mode 為 ECB, Padding 為 None, Zeros 與 PKCS7.

[c#] Regular Expression 抓取/取代特定資料的說明

在網路上常見到一些想用 Regular Expression 取資料的問題.
有些解答看起來很複雜, 實際上只要一個一個 pattern 拆解, 就不難發現道理其實很簡單.
以下的例子將視情況進行補充:

[C#] 利用 Regex 查詢 Html/Xml 標籤中的屬性值

作用: 取得 HTML 或 XML 內容中, 某個標籤下所指定的屬性值.
輸入參數:
  • strHtml(string): HTML 或 XML 的內容.
  • strTagName(string): 標籤名.
  • strAttributeName(string): 屬性名.

[ASP.Net] 利用 RegularExpressionValidator 排除特定字串

在常被用來檢查欄位的驗證控制項中, RegularExpressionValidator 算是最常被用到的.
不過還是不要為了用 RegularExpressionValidator 而用, 以免為了兜出想要的 ValidationExpression 而傷透腦筋. 舉例來說, 設計一個只允許數字的輸入欄, 我們可以用以下兩種做法:

[ASP.NET] 在 html 中加入遠端網頁的內容

  1. 使用 <iframe>: 這種方式大概是最常被使用到的.
    Sample:
    <iframe NAME="outer_frame" width="100%" height="100%" 
      frameborder="0" src="http://www.w3schools.com/" ></iframe>
    Note: iframe 的 width 或 height 設定成 100% 時, 並不會依 iframe 網頁內容而造成無捲軸的現象. 若要透過 javascript 去依 iframe 的內容調整 iframe 的 width 或 height, 也只有同 iframe 所嵌頁面與外部網頁同 domain 的情況下可行, 不同 domain 會因 access deny (存取被拒) 而無法完成此修改 width 或 height 的動作.

[C#] 使用 Regex 將 0123456789 轉成中文

有時在處理數字的顯示時, 會有一種需求是希望將 "第123期" 轉為 "第一二三期", 或是將其轉為 "第壹貳參期".
像這種一對一的轉換, 有一種寫法如下:

[Java] 在 Java 程式中呼叫 .Net 的 Web Service

開發工具:
  • Java: Netbeans6.5 (plugins: Web Services)
  • dotNet: Microsoft Visual Studio 2008
dotNet 部分 (Web Service Server) :
  1. 透過 VS2008 在網站 (Ex: MyTest) 中建立一個名為 HelloWs.asmx 的 Web 服務.
    HelloWs.cs 的程式碼如下:

[C#] 利用 Regex 或 XPath 查詢 xmlns, 並設定 XmlNamespaceManager

本文所使用的 XML 檔案 (ns.xml) 如下:
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <h:table xmlns:h=http://www.w3.org/TR/html4/>
    <h:tr>
      <h:td>Apples</h:td>
      <h:td>Bananas</h:td>
    </h:tr>
  </h:table>
  <f:table xmlns:f="http://www.w3schools.com/furniture">
    <f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
  </f:table>
  <table>
    <name>Microsoft Visual C# 2008 Step by Step</name>
    <author>John Sharp</author>
  </table>
</root>

[ASP.NET] XML 與 XSL 的操作

users.xml 的內容如下:
<?xmlversion="1.0"encoding="utf-8" ?>
<root>
  <user>
    <account>John</account>
    <name>王小明</name>
  </user>
  <user>
    <account>Mary</account>
    <name>吳阿美</name>
  </user>
  <user>
    <account>David</account>
    <name>徐丁丁</name>
  </user>
</root>

[C#] 利用 XPath 的 translate 函式查詢資料

XPath 中有一個函式: translate(string1,string2,string3)
w3schools 網站對其函式的說明: Converts string1 by replacing the characters in string2 with the characters in string3.
利用這個函式, 我們可以進行不區分大小寫的查詢 (如下):

[Other] 好用的 XCOPY

這邊舉例兩個有關 XCOPY 指令的應用:
  • 匯出GAC中的組件:
    1. 切換到 Windows 的 assembly 目錄: cd C:\WINDOWS\assembly
    2. 將 GAC 目錄中的檔案複製到 C:\Temp: XCOPY /S .\GAC C:\Temp
  • 匯出某時間點後異動的檔案: 將 C:\Test 目錄中, 2008-11-20 以後異動的檔案 (連同子目錄) 搬移至 C:\Temp 
    XCOPY C:\Test C:\temp /S /D:11-20-2008

[ASP.Net] 廣告輪播的控制項 (without AJAX)

由於最近要在網頁上加入一個廣告輪播的功能, 且 AJAX Toolkit 的 SlideShowExtender 又因為 OutputCache, 未能正常地產生輪播效果, 所以我使用 JavaScript 搭配 UserControl 做了以下的範例.

[Virtual PC] Virtual PC 的 Image 瘦身 (shrink)

網路上已經有很多這部分的教學, 大致整理如下:
  1. 在虛擬作業系統中進行磁碟清理.
  2. 在虛擬作業系統中進行磁碟重組. (這個步驟不要使用 Windows 內建的磁碟重組工具, 因為會導致後續瘦身的功效不彰)
    網路上有很多免費的磁碟工具可以用, 我是使用 Smart Defrag 這套工具(有支援繁體中文), 不過要記得重組的選項要選"重組&優化", 不然也會失去瘦身的效果.

[ASP.NET] 縮減 AJAX 的 axd 內容大小

由於使用 AJAX 時發現網頁因為包含了一些 axd 內容要下載, 所以整個網頁的內容會變得蠻大的.
為了讓 axd 檔的 size 減少, 讓網頁載入的時間縮短, 所以查了一些網路資料並整理如下:

2010/07/27

[C#] 利用 OleDb 讀取 csv 檔

透過 OleDb 的方式讀取 csv 檔常會遇到型別轉換的問題.
以機關 OID 為例, "2.16.886.101.20003" 會被轉成 "2.1688"
若要解決這問題,就要參考微軟提供的這個設定檔的說明 (http://msdn.microsoft.com/en-us/library/ms709353.aspx).

[ASP.Net] 驗證上傳檔案的副檔名

利用 RegularExpressionValidator 進行檢查:

  1. 僅限上傳PDF檔案(pdf):
    ValidationExpression="^.+\.((p|P)(d|D)(f|F))$"
  2. 僅限上傳WORD檔案(doc,docx):
    ValidationExpression="^.+\.((d|D)(o|O)(c|C))(x|X)?$"
  3. 僅限上傳圖檔(gif,jpg,jpeg,png):
    ValidationExpression =
    "^.+\.(((g|G)(i|I)(f|F))|((j|J)(p|P)(e|E)?(g|G))|((p|P)(n|N)(g|G)))$"

因為 RegularExpressionValidator 控制項, 沒有設定 Regular Expression case-insensitive 的地方, 所以只好用 (e|E) 的方式進行.
雖然看起來有點醜, 不過可以用就好.

[SQL Server 2005] 在查詢中建立小計的資料列並排序

在SQL的應用中, 常見到要查出數量與小計的問題.
以下提供一個以 SQL Server 2005 的 ROW_NUMBER() 與 RANK() , 在一次的查詢中將資料查出數量與小計的方式.
不過還是建議在程式中進行這些作業, 以避免當資料量大時, 查詢效能或擴充性不好的問題.

[CSS] 相容 IE 與 FireFox 的 CSS 寫法

IE 與 FireFox (FF) 在 CSS 的屬性值上有著許多差異, 例如: center與-moz-center
以下是整理網路上的討論並測試出的兩個做法:

[C#] Regular Expression 的 Named Group

概念:
使用 (?<GroupName>Regular Expression) 將符合 Regular Expression 的字串放進群組, 並以 GroupName 做索引值來取用.
以下範例來自於 [藍色小鋪]
範例1:
將 [QryGuideIDList:0001+2=g1+n1+g2+n2+g3+n3] 拆成
PGID: 0001
ListSize: 2
GuideID: g1,g2,g3
GuideName: n1,n2,n3