import java.util.regex.Matcher;import java.util.regex.Pattern;String str="o中文o";String pattern="";Pattern p=null;Matcher m = null;//中文字碼範圍pattern="[\u4e00-\u9fa5]";p=Pattern.compile(pattern);m=p.matcher(str);while(m.find()){ System.out.println(m.group());}
Posts Tagged ‘IT’
Java JSP 正規式取出中文字
5 六月, 2009Java JSP 讀取UTF-8檔案
4 六月, 2009以下程式不考慮UTF-8 BOM的問題

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;File fn=new File("utf8.txt");FileInputStream fis = new FileInputStream(fn);//指定utf-8編碼BufferedReader br = new BufferedReader( new InputStreamReader( fis,"utf-8" ) );String file_str_append="";String file_str="";while((file_str_append=br.readLine())!=null){ file_str+=file_str_append;}br.close();fis.close();//將utf-8所有檔案內容輸出System.out.println(file_str);
中央氣象局 RSS 解析正規式 Regex
1 五月, 2009<%@page contentType="text/html; charset=utf-8" errorPage=""%><%@page import="java.util.regex.Pattern"%><%@page import="java.util.regex.Matcher"%><%out.clear();%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>Parse Central Weather Demo</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body><%String str="";String pattern="^([\\D]+)\\d{2}/\\d{2}\\s([\\D]+)\\s([\\D]+)\\s[\\D]+:\\s(\\d{1,3}\\s~\\s\\d{1,3})\\s[\\D]+:\\s(\\d{1,3})%\\((\\d{2}/\\d{2})\\s(\\d{2}:\\d{2})[\\D]+\\)$";Pattern p=null;Matcher m=null;%> 台北市05/01 今晚至明晨 晴時多雲 溫度: 22 ~ 24 降雨機率: 0%(05/01 16:30發布)<br /><%str=" 台北市05/01 今晚至明晨 晴時多雲 溫度: 22 ~ 24 降雨機率: 0%(05/01 16:30發布)";pattern="^[\\D]+\\d{2}/\\d{2}\\s([\\D]+)\\s([\\D]+)\\s[\\D]+:\\s*(\\d{1,3}\\s~\\s\\d{1,3})\\s[\\D]+:\\s*(\\d{1,3})%\\((\\d{2}/\\d{2})\\s(\\d{2}:\\d{2})[\\D]+\\)$";p = Pattern.compile(pattern);m = p.matcher(str.trim());if(m.find()){ for (int i = 1; i <= m.groupCount(); i++) { out.println("group(" + i + "):" + m.group(i)+"<br />"); } m.reset();}%><hr />明日白天 晴時多雲 溫度: 24 ~ 28 降雨機率: 0% <br /><%str="明日白天 晴時多雲 溫度: 24 ~ 28 降雨機率: 0% ";pattern="^([\\D]+)\\s([\\D]+)\\s[\\D]+:\\s*(\\d{1,3}\\s~\\s\\d{1,3})\\s[\\D]+:\\s*(\\d{1,3})%$";p = Pattern.compile(pattern);m = p.matcher(str.trim());if(m.find()){ for (int i = 1; i <= m.groupCount(); i++) { out.println("group(" + i + "):" + m.group(i)+"<br />"); } m.reset();}%><hr />05/02 溫度:22 ~ 28 晴時多雲<%str="05/02 溫度:22 ~ 28 晴時多雲";pattern="^(\\d{2}/\\d{2})\\s[\\D]+:\\s*(\\d{1,3}\\s~\\s\\d{1,3})\\s([\\D]+)$";p = Pattern.compile(pattern);m = p.matcher(str.trim());if(m.find()){ for (int i = 1; i <= m.groupCount(); i++) { out.println("group(" + i + "):" + m.group(i)+"<br />"); } m.reset();}%></body></html>


執行結結果:

台北市05/01 今晚至明晨 晴時多雲 溫度: 22 ~ 24 降雨機率: 0%(05/01 16:30發布)
group(1):今晚至明晨
group(2):晴時多雲
group(3):22 ~ 24
group(4):0
group(5):05/01
group(6):16:30


明日白天 晴時多雲 溫度: 24 ~ 28 降雨機率: 0%
group(1):明日白天
group(2):晴時多雲
group(3):24 ~ 28
group(4):0


05/02 溫度:22 ~ 28 晴時多雲group(1):05/02
group(2):22 ~ 28
group(3):晴時多雲




備註:中央氣象局的RSS2.0並不是完全符合W3C的標準,且資料呈現不夠有條理,不易被解析
瞎掰Vista的由來
1 五月, 2009瞎掰Vista的由來
M$總裁問開發團隊:Longhone要到哪個版本開始發行?
團隊:Beta。
M$總裁:Vista~~sounds good, just do it!
所以其實 **Windows Beta** ,才是正解
Vista只是口誤,而Windows7才是真正的stable release。
開發有中文內容的專案要考慮的事情
30 四月, 2009跟一個美工人員說目前的專案要有中文,

美工會考慮有沒有適合的中文字型。


跟一個程式人員說目前的專案要有中文,

程式人員會考慮會不會有中文衝碼。


跟一個資料庫管理人員說目前的專案要有中文,

資料庫管理人員會考慮資料儲存是否要用Unicode儲存中文。


跟一個企劃人員說目前的專案要有中文,

企劃人員會考慮內容是否能夠因為中文而引人注目。


跟老闆說目前的專案要有中文,

老闆會考慮什麼時候開始專案會開始賺錢,有沒有中文都沒關係
。
Win32 PHP5 ODBC To Access Demo
27 四月, 2009//設定ODBC來源,使用真實檔案路徑$dblink_id = odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\db.mdb","mdb id","mdb pw" ) or die ("db error");//sql式,選出id的欄位$sql='SELECT id FROM ur_table';if ($dblink_id) { //執行sql $res=odbc_exec($dblink_id,$sql); if($res) { //初始陣列 $arr=array(); //odbc_fetch_row不會回傳陣列,所以必須自行轉置,並指定使用hash的方式推入陣列 while($list=odbc_fetch_array($res,ODBC_ASSOC)){ array_push($arr,$list); } for( $i=0;$i<count($arr);$i++){ //從陣列中取值的方式$arr[陣列索引].[欄位名稱] echo 'id:'.$arr[$i]['id']."\n"; } } else{ echo 'odbe_exec error'."\n"; }}else{ echo 'db link error'."\n";}
Firefox3 Add-ons PlainOldFavorites FX使用IE我的最愛
21 四月, 2009PlainOldFavorites

https://addons.mozilla.org/zh-TW/firefox/addon/668

說明:在Firefox內使用IE我的最愛


這個plugin適合剛從IE跳槽到FX3的使用者,

安裝完後,在Firefox內就會出現"我的最愛"了,而且跟IE上,我的最愛使用方式相同喔!

jQuery 1.3.2 Selectors Demo
9 三月, 2009Selectors:Hierarchy
- ancestor descendant
選出所有ancestor之下的descendant元素,不論descendant位於ancestor之下幾層。
類似xpath語法://ancestor//descendant - parent > child
選出parent的子元素。
類似xpath語法://parent/child - prev + next
選出prev元素接著next元素的所有next元素。
類似的xpath語法://prev/next - prev ~ siblings
選出prev的所有siblings
類似的xpath語法://prev/siblings/following-sibling::*
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jQuery 測試</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" mce_src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> </head> <body> <div id="msg_div">default text</div> <form name="f1"> <span> <input type="text" name="text1" value="this is f1 text1 value" /><br /> <input type="text" name="text2" value="this is f1 text2 value" /><br /> </span> <input type="button" value="Demo parent child" id="btn1" /><br /> <input type="button" value="Demo parent > child" id="btn2" /><br /> <input type="button" value="Demo prev + next" id="btn3" /><br /> <input type="button" value="Demo prev ~ siblings" id="btn4" /><br /> </form> <script type="text/javascript"><!-- $(document).ready(function(){ var ck='blue'; $('#btn1').click(function(){ $('#msg_div').text($.trim($('form[name=f1] input[name=text1]').val())); }); $('#btn2').click(function(){ $('#msg_div').text($.trim($('form[name=f1] > span > input[name=text2]').val())); }); $('#btn3').click(function(){ if(ck=='blue'){ $('span+input').css("color", "yellow"); ck='yellow'; } else{ $('span+input').css("color", "blue"); ck='blue'; } }); $('#btn4').click(function(){ $('span ~ input[id=btn1]').css('color','green'); }); }); // --></script> </body> </html>
XSS 攻擊!?walkOne安全嗎?附 XSS 簡易阻斷方法
2 三月, 2009平常在看不知名人士的部落格時,

也許會被一些部落格元件給吸引,覺得自己也想用一個,

就隨便把來路不明的部落格元件掛到了自己的部落格,

過沒多久卻發現一些私人文章、上鎖文章、甚至完全沒有公開的相簿,

在別處被人完完整整,臉紅心跳的貼出來(這不是塵灌吸~這不是塵灌吸~)


通常人的第一反應,都是:"我的電腦中毒了",

然後就
正妹
找
好人
,好人去 黃色鬼屋,辛辛苦苦的把電腦重灌完畢
,

接著平靜的生活過沒多久,同樣的事情又發生了,陷入無盡的重灌...(鄉民也開心的無盡的抓~~喂)


其實~~這最大的元兇也許就是那個來路不明的部落格元件,元件內可能包含了 XSS 攻擊的程式碼!

而不是自己的電腦中毒所造成的資料外流。


Q:沒有辦法防範XSS攻擊嗎?

A:XSS的攻擊是非常難看出的,因為它完全不會破壞你的系統。只能消極的慎選自己平時逛的網站,不要使用來路不明的部落格元件,一定要養成登出後再關閉瀏覽器的好習慣,最後一個良心的建議:
敢放上網的東西,就不要怕被人看
…XD


Q:walkOne會有此問題嗎?

A:目前 walkOne 的登入機制採 IP+cookies+多網認證制,且有提供高安全性模登入模式,安全性較高。


以下是寫給網站開發人員看的,不懂的人請把它當是我的碎碎唸吧!


基於網站開發人員有義務把會員的資料做到最嚴密的
流出
保護,

我們必須設法阻斷XSS攻擊,以下是重點:


訪客未登入的系統 key 值在 front.net 與 back.net 相同,

當訪客從 back.net 登入後,會有一固定的新系統 key 值,

同時存於 front.net 及 back.net ,並在 back.net 建立 cookies,

再將已登入的訪客導至 front.net ,且也於 front.net 建立 cookies,

正常訪客身上將同時帶有 front.net 及 back.net 的認證 cookies,

當 XSS 攻擊者偷取cookies時,僅能偷取到 front.net 的 cookies,

只要 XSS 攻擊者沒有真正於 back.net 上建立過 cookies,

則back.net會一直回傳未登入的系統 key 值,

於是當訪客登入後在 front.net 操作時,

判斷 front.net 的系統 key 值與 back.net 傳回的系統 key 值是否相等,

即可判斷該訪客是否有透過正常管道登入。

至於如何在 front.net 的頁面中取得 back.net 的 cookies,

可以參考 jQuery 1.3.1 Ajax Cross Domain JSP Demo

Win32 Apache2.2.x 上建置SVN服務
14 一月, 2009Apache官網:http://httpd.apache.org/
文中使用Apache版本:http://archive.apache.org/dist/httpd/binaries/win32/apache_2.2.10-win32-x86-no_ssl.msi
SVN官網:http://subversion.tigris.org/
文中使用SVN版本:http://subversion.tigris.org/files/documents/15/44589/svn-win32-1.5.5.zip
於 httpd.conf 的尾端加入
#修改/WEB-INF/及/META-INF/,配合tomcat目錄權限, #要瀏覽這兩個目錄時,至少要通過基本Apache的帳號認證 <LocationMatch "/WEB-INF/"> AllowOverride AuthConfig Order allow,deny Allow from all Order deny,allow Deny from all </LocationMatch> <LocationMatch "/META-INF/"> AllowOverride None AuthConfig Order allow,deny Allow from all Order deny,allow Deny from all </LocationMatch> # 添加 SVN 的模組 LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so #http://localhost/svn的目錄設定 <Location /svn> DAV svn #SVN實體磁碟路徑 SVNPath C:/svn-win32-1.5.5/svn AuthType Basic AuthName "Subversion repository" #使用者權限設定檔 AuthzSVNAccessFile C:/svn-win32-1.5.5/auth #使用者密碼檔 AuthUserFile C:/svn-win32-1.5.5/pwd Require valid-user </Location>
於auth內輸入: [groups] admins = admin_user users = user_a,user_b [svn:/] * = r @admins = rw [svn:/project_1] @admins = rw @users = rw [svn:/project_2] @admins = rw @users = r
- 輸入 htpasswd.exe -c C:\svn-win32-1.5.5\pwd admin_user 按 Enter 鍵送出,會提示設定 admin_user 的密碼兩次,-c 代表初始建立密碼檔案
- 輸入 htpasswd.exe C:\svn-win32-1.5.5\pwd user_a 按 Enter 鍵送出,一樣會提示設定 user_a 的密碼兩次
- 輸入 htpasswd.exe C:\svn-win32-1.5.5\pwd user_b 按 Enter 鍵送出,一樣會提示設定 user_b 的密碼兩次
- 輸入 svn.exe mkdir -m “project_1″ http://localhost/svn/project_1 按 Enter 鍵送出
- 輸入 svn.exe mkdir -m “project_2″ http://localhost/svn/project_2 按 Enter 鍵送出
- 輸入 svn.exe list http://localhost/svn 按 Enter 鍵送出,查看目錄是否建立