<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    問征夫以前路
    感謝所有關心過支持過我的人, 感謝所有恨過我嘲笑過我的人 !
    posts - 30,comments - 147,trackbacks - 0

              textarea中特殊字符回車換行存入數據庫丟失數據的問題已解決,現把解決方法昭告天下:)
              解決這兩類問題的時候,必不可少的就是要有一個java類。
             

      1/*
      2 * Escape.java
      3 *
      4 * Created on 2007年11月19日, 下午1:41
      5 *
      6 * To change this template, choose Tools | Template Manager
      7 * and open the template in the editor.
      8 */

      9
     10package com.bjnni.cims.common;
     11
     12/**
     13 * 處理特殊字符,如:(!@#$%^&*=)的編碼和解碼類
     14 * @author ken  <zhanghhui@126.com>
     15 */

     16public class Escape {
     17    private final static String[] hex = {
     18        "00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F",
     19        "10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F",
     20        "20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F",
     21        "30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F",
     22        "40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F",
     23        "50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F",
     24        "60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F",
     25        "70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F",
     26        "80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F",
     27        "90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F",
     28        "A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF",
     29        "B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF",
     30        "C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF",
     31        "D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF",
     32        "E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF",
     33        "F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"
     34    }
    ;
     35    private final static byte[] val = {
     36        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     37        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     38        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     39        0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     40        0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     41        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     42        0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     43        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     44        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     45        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     46        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     47        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     48        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     49        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     50        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
     51        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F
     52    }
    ;
     53    public static String escape(String s) {
     54        StringBuffer sbuf = new StringBuffer();
     55        int len = s.length();
     56        for (int i = 0; i < len; i++{
     57            int ch = s.charAt(i);
     58            if (ch == ' '{                        // space : map to '+'
     59                sbuf.append('+');
     60            }
     else if ('A' <= ch && ch <= 'Z'{    // 'A'..'Z' : as it was
     61                sbuf.append((char)ch);
     62            }
     else if ('a' <= ch && ch <= 'z'{    // 'a'..'z' : as it was
     63                sbuf.append((char)ch);
     64            }
     else if ('0' <= ch && ch <= '9'{    // '0'..'9' : as it was
     65                sbuf.append((char)ch);
     66            }
     else if (ch == '-' || ch == '_'       // unreserved : as it was
     67                    || ch == '.' || ch == '!'
     68                    || ch == '~' || ch == '*'
     69                    || ch == '\'' || ch == '('
     70                    || ch == ')'{
     71                sbuf.append((char)ch);
     72            }
     else if (ch <= 0x007F{              // other ASCII : map to %XX
     73                sbuf.append('%');
     74                sbuf.append(hex[ch]);
     75            }
     else {                                // unicode : map to %uXXXX
     76                sbuf.append('%');
     77                sbuf.append('u');
     78                sbuf.append(hex[(ch >>> 8)]);
     79                sbuf.append(hex[(0x00FF & ch)]);
     80            }

     81        }

     82        return sbuf.toString();
     83    }

     84    public static String unescape(String s) {
     85        StringBuffer sbuf = new StringBuffer();
     86        int i = 0;
     87        int len = s.length();
     88        while (i < len) {
     89            int ch = s.charAt(i);
     90            if (ch == '+'{                        // + : map to ' '
     91                sbuf.append(' ');
     92            }
     else if ('A' <= ch && ch <= 'Z'{    // 'A'..'Z' : as it was
     93                sbuf.append((char)ch);
     94            }
     else if ('a' <= ch && ch <= 'z'{    // 'a'..'z' : as it was
     95                sbuf.append((char)ch);
     96            }
     else if ('0' <= ch && ch <= '9'{    // '0'..'9' : as it was
     97                sbuf.append((char)ch);
     98            }
     else if (ch == '-' || ch == '_'       // unreserved : as it was
     99                    || ch == '.' || ch == '!'
    100                    || ch == '~' || ch == '*'
    101                    || ch == '\'' || ch == '('
    102                    || ch == ')'{
    103                sbuf.append((char)ch);
    104            }
     else if (ch == '%'{
    105                int cint = 0;
    106                if ('u' != s.charAt(i+1)) {         // %XX : map to ascii(XX)
    107                    cint = (cint << 4| val[s.charAt(i+1)];
    108                    cint = (cint << 4| val[s.charAt(i+2)];
    109                    i+=2;
    110                }
     else {                            // %uXXXX : map to unicode(XXXX)
    111                    cint = (cint << 4| val[s.charAt(i+2)];
    112                    cint = (cint << 4| val[s.charAt(i+3)];
    113                    cint = (cint << 4| val[s.charAt(i+4)];
    114                    cint = (cint << 4| val[s.charAt(i+5)];
    115                    i+=5;
    116                }

    117                sbuf.append((char)cint);
    118            }

    119            i++;
    120        }

    121        return sbuf.toString();
    122    }

    123    public static void main(String[] args) {
    124        String stest = "中文1234 abcd[]()<+>,.~\\";
    125        System.out.println(stest);
    126        System.out.println(escape(stest));
    127        System.out.println(unescape(escape(stest)));
    128    }

    129}

    130

      這個類里面定義了escape和unescape兩個方法,escape用于對特殊字符編碼,unescape用于解碼。在添加頁面,用到testarea控件,在數據入庫前,先要用escape進行編碼。然后在更改頁面顯示的時候,要調用unescape方法進行解碼,要記得在頁面里把Escape類引進來。這樣testarea的回車換行以及textarea中特殊字符存入數據庫丟失數據的問題就解決了。
    posted on 2007-11-20 11:50 kenzhang 閱讀(6535) 評論(7)  編輯  收藏

    FeedBack:
    # re: 解決textarea特殊字符回車換行存入數據庫數據丟失的問題
    2007-11-20 21:41 | 隔葉黃鶯
    沒必要搞的這么復雜,如果你的是正解,這就意味著用了textarea就必須使這么一大段代碼,確切一點說,這會是誰的bug呢  回復  更多評論
      
    # re: 解決textarea特殊字符回車換行存入數據庫數據丟失的問題
    2007-11-20 21:42 | 冷面閻羅
    支持一下  回復  更多評論
      
    # re: 解決textarea特殊字符回車換行存入數據庫數據丟失的問題
    2007-11-21 09:03 | 阿蜜果
    繼續努力!嘻嘻  回復  更多評論
      
    # re: 解決textarea特殊字符回車換行存入數據庫數據丟失的問題
    2007-11-21 09:08 | kenzhang
    @隔葉黃鶯
    如果項目用的是struts,用的是<html:testarea>標簽,那么我上面寫的問題就不會出現,當然也就用不到escape類。
    這個問題只是針對我做的這個項目(jsp+servlet),因為一些數據的增、刪、改、查都是在jsp頁面實現的,其中也用到了很多javascript,所以在testarea中解決特殊字符就會有些復雜了!  回復  更多評論
      
    # re: 解決textarea特殊字符回車換行存入數據庫數據丟失的問題
    2007-11-21 09:16 | 隔葉黃鶯
    統一設置UTF-8字符集呀  回復  更多評論
      
    # re: 解決textarea特殊字符回車換行存入數據庫數據丟失的問題
    2007-11-21 09:20 | kenzhang
    @隔葉黃鶯
    我們每個頁面都統一用UTF-8字符集。  回復  更多評論
      
    # re: 解決textarea特殊字符回車換行存入數據庫數據丟失的問題
    2007-12-04 17:16 | hj
    tyt
    hgjdy  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产做床爱无遮挡免费视频| 中文字幕在线观看亚洲视频| 亚洲AV香蕉一区区二区三区| 久久精品国产亚洲一区二区| 国产一级淫片免费播放| 免费视频专区一国产盗摄| a毛片视频免费观看影院| 免费一级做a爰片久久毛片潮| 99999久久久久久亚洲| 久久精品a亚洲国产v高清不卡| 亚洲无码精品浪潮| 免费很黄很色裸乳在线观看| 成人免费a级毛片无码网站入口 | 久久精品免费一区二区| 国产精品黄页免费高清在线观看| 国产亚洲一卡2卡3卡4卡新区 | 两性刺激生活片免费视频| 久久久久国产精品免费免费不卡| 一级毛片免费观看不收费| 美国免费高清一级毛片| 国产精品观看在线亚洲人成网| 亚洲AV成人一区二区三区在线看| 亚洲午夜日韩高清一区| 日日操夜夜操免费视频| 在线观看国产情趣免费视频| 免费看AV毛片一区二区三区| 无码免费午夜福利片在线| 免费国产成人高清在线观看网站| 美丽的姑娘免费观看在线播放 | 亚洲男人第一无码aⅴ网站| 国产乱子伦精品免费女| 精品免费国产一区二区三区| 午夜时刻免费入口| 热99re久久免费视精品频软件 | a一级毛片免费高清在线| 一本一道dvd在线观看免费视频 | 亚洲成A人片在线观看WWW| 亚洲AV综合色区无码另类小说| 国产精品视频永久免费播放| 两个人的视频高清在线观看免费| 手机在线免费视频|