Archive

文章標籤 ‘Java’

jQuery 小技巧 – 在非UTF8語系網頁傳遞中文參數排除方式

2009年1月14日 尚無評論

jQuery 在UTF8語系網頁傳遞中文時是一切正常的

但如果是big5語系時就會發生問題,因此要進行轉碼才能正常傳遞參數才行
在網頁用ajax傳遞時,要先將資料利用javascript的escape function進行轉碼

例如:

$(document).ready(function(){
  $.post(
     “getdata.asp”,
     {
       id:
escape(“中文字喔!!”)
     },
     function(txt){
      alert(txt);

     }
  );
});


以下是PHP版的解escape的函式:

function unescape($str) {
     $str = rawurldecode($str);
     preg_match_all(“/%u.{4}|&#x.{4};|&#\d+;|&#\d+?|.+/U”,$str,$r);
     $ar = $r[0];
     foreach($ar as $k=>$v) {
         if(substr($v,0,2) == “%u”)
         $ar[$k] = iconv(“UCS-2″,”Big5”,pack(“H4”,substr($v,-4)));
         else if(substr($v,0,3) == “&#x”)
         $ar[$k] = iconv(“UCS-2″,”Big5”,pack(“H4”,substr($v,3,-1)));
         elseif(substr($v,0,2) == “&#”) {
             $ar[$k] = iconv(“UCS-2″,”GBK”,pack(“n”,preg_replace(“/[^\d]/”,””,$v)));
         }
     }
     return join(“”,$ar);
  } 


以下是Java版本解escape的函式:

/**
* JavaScript escape/unescape 編碼的Java實現
* author jackyz keep this copyright info while using this method by free
*/
public class JavaScriptEscape {
   private final static String[] hex = { “00”, “01”, “02”, “03”, “04”, “05”,
           “06”, “07”, “08”, “09”, “0A”, “0B”, “0C”, “0D”, “0E”, “0F”, “10”,
           “11”, “12”, “13”, “14”, “15”, “16”, “17”, “18”, “19”, “1A”, “1B”,
           “1C”, “1D”, “1E”, “1F”, “20”, “21”, “22”, “23”, “24”, “25”, “26”,
           “27”, “28”, “29”, “2A”, “2B”, “2C”, “2D”, “2E”, “2F”, “30”, “31”,
           “32”, “33”, “34”, “35”, “36”, “37”, “38”, “39”, “3A”, “3B”, “3C”,
           “3D”, “3E”, “3F”, “40”, “41”, “42”, “43”, “44”, “45”, “46”, “47”,
           “48”, “49”, “4A”, “4B”, “4C”, “4D”, “4E”, “4F”, “50”, “51”, “52”,
           “53”, “54”, “55”, “56”, “57”, “58”, “59”, “5A”, “5B”, “5C”, “5D”,
           “5E”, “5F”, “60”, “61”, “62”, “63”, “64”, “65”, “66”, “67”, “68”,
           “69”, “6A”, “6B”, “6C”, “6D”, “6E”, “6F”, “70”, “71”, “72”, “73”,
           “74”, “75”, “76”, “77”, “78”, “79”, “7A”, “7B”, “7C”, “7D”, “7E”,
           “7F”, “80”, “81”, “82”, “83”, “84”, “85”, “86”, “87”, “88”, “89”,
           “8A”, “8B”, “8C”, “8D”, “8E”, “8F”, “90”, “91”, “92”, “93”, “94”,
           “95”, “96”, “97”, “98”, “99”, “9A”, “9B”, “9C”, “9D”, “9E”, “9F”,
           “A0”, “A1”, “A2”, “A3”, “A4”, “A5”, “A6”, “A7”, “A8”, “A9”, “AA”,
           “AB”, “AC”, “AD”, “AE”, “AF”, “B0”, “B1”, “B2”, “B3”, “B4”, “B5”,
           “B6”, “B7”, “B8”, “B9”, “BA”, “BB”, “BC”, “BD”, “BE”, “BF”, “C0”,
           “C1”, “C2”, “C3”, “C4”, “C5”, “C6”, “C7”, “C8”, “C9”, “CA”, “CB”,
           “CC”, “CD”, “CE”, “CF”, “D0”, “D1”, “D2”, “D3”, “D4”, “D5”, “D6”,
           “D7”, “D8”, “D9”, “DA”, “DB”, “DC”, “DD”, “DE”, “DF”, “E0”, “E1”,
           “E2”, “E3”, “E4”, “E5”, “E6”, “E7”, “E8”, “E9”, “EA”, “EB”, “EC”,
           “ED”, “EE”, “EF”, “F0”, “F1”, “F2”, “F3”, “F4”, “F5”, “F6”, “F7”,
           “F8”, “F9”, “FA”, “FB”, “FC”, “FD”, “FE”, “FF” };

   private final static byte[] val = { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x01,
           0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
           0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F };

   /**
    * 編碼
    * 
    * @param s
    * @return
    */
   public static String escape(String s) {
       StringBuffer sbuf = new StringBuffer();
       int len = s.length();
       for (int i = 0; i < len; i++) {
           int ch = s.charAt(i);
           if ('A' <= ch && ch <= 'Z') {
               sbuf.append((char) ch);
           } else if ('a' <= ch && ch <= 'z') {
               sbuf.append((char) ch);
           } else if ('0' <= ch && ch <= '9') {
               sbuf.append((char) ch);
           } else if (ch == '-' || ch == '_' || ch == '.' || ch == '!'
                   || ch == '~' || ch == '*' || ch == '\'' || ch == '('
                   || ch == ')') {
               sbuf.append((char) ch);
           } else if (ch <= 0x007F) {
               sbuf.append('%');
               sbuf.append(hex[ch]);
           } else {
               sbuf.append('%');
               sbuf.append('u');
               sbuf.append(hex[(ch >>> 8)]);
               sbuf.append(hex[(0x00FF & ch)]);
           }
       }
       return sbuf.toString();
   }

   /**
    * 解碼 說明:本方法保證 不論參數s是否經過escape()編碼,均能得到正確的「解碼」結果
    * 
    * @param s
    * @return
    */
   public static String unescape(String s) {
       StringBuffer sbuf = new StringBuffer();
       int i = 0;
       int len = s.length();
       while (i < len) {
           int ch = s.charAt(i);
           if ('A' <= ch && ch <= 'Z') {
               sbuf.append((char) ch);
           } else if ('a' <= ch && ch <= 'z') {
               sbuf.append((char) ch);
           } else if ('0' <= ch && ch <= '9') {
               sbuf.append((char) ch);
           } else if (ch == '-' || ch == '_' || ch == '.' || ch == '!'
                   || ch == '~' || ch == '*' || ch == '\'' || ch == '('
                   || ch == ')') {
               sbuf.append((char) ch);
           } else if (ch == '%') {
               int cint = 0;
               if ('u' != s.charAt(i + 1)) {
                   cint = (cint << 4) | val[s.charAt(i + 1)];
                   cint = (cint << 4) | val[s.charAt(i + 2)];
                   i += 2;
               } else {
                   cint = (cint << 4) | val[s.charAt(i + 2)];
                   cint = (cint << 4) | val[s.charAt(i + 3)];
                   cint = (cint << 4) | val[s.charAt(i + 4)];
                   cint = (cint << 4) | val[s.charAt(i + 5)];
                   i += 5;
               }
               sbuf.append((char) cint);
           } else {
               sbuf.append((char) ch);
           }
           i++;
       }
       return sbuf.toString();
   }

   public static void main(String[] args) {
       String stest = “中文1234abcd”;
       System.out.println(stest);
       System.out.println(escape(stest));
       System.out.println(unescape(escape(stest)));
   }

}

參考資料:
http://zhanghaidang.javaeye.com/blog/150470
http://blog.csdn.net/mubingyun/archive/2008/12/09/3482219.aspx
http://skiyo.cn/article/Skiyo-38-1223063418.html

Categories: Java Script Tags: , ,

移除Html 的Tag 完全手冊(Javascript,Java,C#,PHP)

2008年12月16日 2 則評論

移除Html的Tag 標籤,最近有需要用到,所以整理以下各語言相關的作法

Javascript:

function RemoveHTML( strText )
{
var regEx = /<[^>]*>/g;
return strText.replace(regEx, “”);
}

C# for .Net:

public string RemoveHTMLInServer(string in_HTML)
       {
           return Regex.Replace(in_HTML, “<(.|\n)*?>”, “”);
       }

Java:

public String reFormat(String content) {
content = content.replaceAll(“(?is)\\s\\s”, ” “);
content = content.replaceAll(“(?is)</?br>”, “\n”);
content = content.replaceAll(“(?is)</?p>”, “\n”);
content = content.replaceAll(“(?is)&nbsp;”, “”);
content = content.replaceAll(“(?is)</?[a-z][a-z0-9]*[^<>]*>”, “”);
content = content.replaceAll(“<!–/?.*–>”, “”);
content = content.replaceAll(“ ”, “”);
content = content.trim();
return content;
}

PHP:

函數strip_tags的功能是刪除html標記,他的第二個參數是一個保留的html標記列表  
  如:  
  只保留<b>則strip_tags($text,”<b>”)  
  只保留<b><br><p>則strip_tags($text,”<b><br><p>”)  

參考資料:
http://www.cnblogs.com/time-is-life/archive/2008/02/13/1067790.html
http://topic.csdn.net/t/20050221/16/3795604.html

Categories: 專業技術 Tags: , , ,

String format

2008年9月8日 尚無評論

JDK1.5版之後String 有提供一個format格式,很像c的printf 功能,蠻不錯用的

String.format(String format, Object… args)
String.format(Locale l, String format, Object… args)
   可傳入指定的語言環境、格式字串和參數
   返回一個格式化字符串。

格式字串,用法都差不多,以下簡單說明幾個常用的

%s 顯示字串
%5$-10s 顯示字串從第5位開始,- 為靠左對齊, 20為字串長度
%,10.2d 顯示數值,每三位數用逗點區隔,如不足十位會用空白靠右顯示
%5.2f     顯示浮點數,小數點二位數顯示

詳細的格式字串請參考:
Format http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html

資料來源:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#format(java.util.Locale,%20java.lang.String,%20java.lang.Object…)

Categories: JAVA Tags: , ,

Spring JavaMailSenderImpl 寄送Email 認證調整

2008年9月5日 尚無評論

Spring 透過JavaMailSenderImpl 寄送Email時,預設是不透過認證方式寄信的
所以當使用smtp是需要帳號認證的,就要調整一下設定才行

首先要先建立一個class extends Properties,如下:

import java.util.Properties;

public class MailProperties extends Properties {
  private String auth;

  public MailProperties(String auth){
    super.setProperty(“mail.smtp.auth”,auth);
  }
}

然後在引入mail 的configure 檔案中加上使用參數即可:

<bean id=”mailProperties”  class=”spring.email.MailProperties”>
    <constructor-arg index=”0″>
          <value>true</value>
    </constructor-arg>
</bean>

並且在你的JavaMailSenderImpl使用參數中再加上username及password即可:

<bean id=”mailSender”  class=”org.springframework.mail.javamail.JavaMailSenderImpl”>
   <property name=”host”>
     <value>yoursmtpserver</value>
   </property>
   <property name=”username”>
     <value>username</value>
   </property>
   <property name=”password”>
     <value>password</value>
   </property>
   
   <property name=”javaMailProperties”>
     <ref local=”mailProperties”/>
   </property>
   
</bean>

這樣寄信就能支援認證機制囉!!

參考資料:
http://www.cjsdn.net/post/view?bid=20&id=147550&sty=1&tpg=9&age=0

Categories: JAVA Tags: , ,

Java Copy 檔案及資料夾的方法

2008年8月20日 2 則評論

Java對檔案的處理,已經提供非常完整的API
不過像複製檔案的功能,還是要再手動多寫幾行code才行
以下就介紹copy 檔案的方式,順便說一下如何copy 資料夾

1.這是最基本的方式,利用read()方式進行複製動作

public void copyFile(String srFile, String dtFile){
  try{
     File f1 = new File(srFile);
     File f2 = new File(dtFile);
     InputStream in = new FileInputStream(f1);
     OutputStream out = new FileOutputStream(f2);
     byte[] buf = new byte[1024];
     int len;
     while ((len = in.read(buf)) > 0){
       out.write(buf, 0, len);
     }
     in.close();
     out.close();
  }
  catch(FileNotFoundException ex){
     ex.printStackTrace(); 
  }
  catch(IOException e){
     ex.printStackTrace();   
  }
}

2.在JDK 1.4時,多了一些對IO處理的API放在java.nio這個package,叫做NIO (NEW I/O),先前JAVA提供的IO都會blocking IO,因此導致很多Thread在進行IO處理時就會造成整體效能變差,NIO它的最大優點,是可以在同一條 thread 讀寫多個channel而不會被單一的IO blocking限制效率並且也減少多了透過byte[]方式的動作。所以我們也提供NIO複製的方式

public  void copyFile(String srFile, String dtFile){
  try{
       FileChannel srcChannel = new FileInputStream(srFile).getChannel();
       FileChannel dstChannel = new FileOutputStream(dtFile).getChannel();
       dstChannel.transferFrom(srcChannel, 0, srcChannel.size());
       srcChannel.close();
       dstChannel.close();
  } catch (IOException e) {
      e.printStackTrace();   
  }
}

3.複製資料夾,當然能複製檔案外,也可以寫個小method來進行資料夾的複製,有點像xcopy的方式,這裡要注意,以下的程式碼copyFile 是傳入File而非上述sample code的String,請自行再調整一下

public void copyDirectory(File source, File target) {  
       File[] file = source.listFiles();
       for (int i = 0; i < file.length; i++) {  
           if (file[i].isFile()) { 
               File sourceDemo = new File(source.getAbsolutePath() + “/” 
                       + file[i].getName());  
               File destDemo = new File(target.getAbsolutePath() + “/” 
                       + file[i].getName());  
               this.copyFile(sourceDemo, destDemo);  
           }  
           if (file[i].isDirectory()) {
               File sourceDemo = new File(source.getAbsolutePath() + “/” 
                       + file[i].getName());  
               File destDemo = new File(target.getAbsolutePath() + “/” 
                       + file[i].getName());  
               destDemo.mkdir();
               this.copyDirectory(sourceDemo, destDemo);  
           }  
       }
  }

參考資料:

Categories: JAVA Tags: , ,
分頁: 上一頁 1 2 3 4 5 下一頁