<%@ page import="java.net.*"%> <%@ page import="java.io.*"%> <%@ page import="java.util.*"%> <%@ page contentType="text/html;charset=UTF-8" %> <% //クラスの呼び出し URLEncoderUTF8 enc = new URLEncoderUTF8(); response.setContentType("text/html;charset=UTF-8"); //============================================================== //= パラメータの読み取り //============================================================== //request.setCharacterEncoding("UTF-8"); String sj_parm_area = enc.getUnicodeURL("*"); String sj_parm_type = enc.getUnicodeURL("*"); String BACK = request.getParameter("BACK"); String HEADER = request.getParameter("HEADER"); //パラメータのデフォルト設定 if (BACK != null) { //- パラメータの受け取り BACK = CgiDecode(BACK); BACK = htmlDecode(BACK); BACK = htmlEncode(BACK); BACK = CgiEscape(BACK); } //- false以外はnullにする if (HEADER != null) { if (!HEADER.equals("false")) { HEADER = null; } } %>
資料番号 文字種 言語 種別 資料名 大きさ形状 枚数
<%! //============================================================== //= サブルーチン //============================================================== //================================ //= HTMLエンコード //================================ private String htmlEncode(String input) { if (input==null) { return input; } StringBuffer buf = new StringBuffer(); char[] c = input.toCharArray(); for (int i=0; i < c.length; i++) { switch (c[i]) { case '&': buf.append("&"); break; case '<': buf.append("<"); break; case '>': buf.append(">"); break; case '"': buf.append("""); break; default: buf.append(c[i]); } } return buf.toString(); } //================================ //= HTMLデコード //================================ private String htmlDecode(String val) { val = replace(val , "&" , "&"); val = replace(val , "<" , "<"); val = replace(val , ">" , ">"); val = replace(val , """ , "\""); return val; } public class URLEncoderUTF8{ public String getUnicodeURL(String url){ StringBuffer buffer = new StringBuffer(); //URLエンコード文字列 int intCode = 0; //1文字の文字コード整数型 long u = 0; //1文字の文字コード長整数型 int syo = 0; //ビット演算時使用 for(int i=0;i= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a))){ //0x2A(42)=* 0x2D(45)=- 0x2E(46)=. 0x5F(95)=_ 0x30(48)=0 0x39(57)=9 0x41(65)=A 0x5A(90)=Z 0x61(97)=a 0x7A(122)=z //http://www.m-hoz.com/jsp/unicode.jsp ユニコード文字コード表 buffer.append(url.charAt(i)); //変換不要文字 } else{ //変換が必要な文字 if ( u > 0xf ){ //0xF(15)より大きい場合 buffer.append("%"); buffer.append(Integer.toHexString((int)url.charAt(i))); //16進数変換後も2桁になる } else{ buffer.append("%0"); //16進数変換後1桁になるので前0付加 buffer.append(Integer.toHexString((int)url.charAt(i))); } } } else if ( (u >= 0x80) && (u <= 0x7ff) ){ //0x80(128)~0x7FF(2047) syo = ((int)(u / 0x40)); syo = syo | 0xc0; buffer.append("%"); buffer.append(Integer.toHexString(syo)); syo = ((int)(u & 0x3f)); syo = syo | 0x80; buffer.append("%"); buffer.append(Integer.toHexString(syo)); } else if ( (u >= 0x800) && (u <= 0xffff) ){ //0x800(2048)~0xFFFF(65535) 4E00あたりは漢字 syo = ((int)(u / 0x1000)); syo = syo | 0xe0; buffer.append("%"); buffer.append(Integer.toHexString(syo)); syo = ((int)(u & 0xfc0)); syo = syo / 0x40; syo = syo | 0x80; buffer.append("%"); buffer.append(Integer.toHexString(syo)); syo = ((int)(u & 0x3f)); syo = syo | 0x80; buffer.append("%"); buffer.append(Integer.toHexString(syo)); } //u = Integer.toHexString((int)url.charAt(i)); //u = Integer.toString((int)url.charAt(i)); } return buffer.toString(); } } //================================ //= 文字列を置換 //================================ private String replace(String input, String pattern, String replace) { int index = input.indexOf(pattern); if (index==-1) { return input; } StringBuffer sb = new StringBuffer(); sb.append(input.substring(0,index) + replace); int plen = pattern.length(); if (index + plen < input.length()) { String s = input.substring(index + plen); sb.append(replace(s , pattern , replace)); } return sb.toString(); } %> <%! private String CgiEscape(String strVar){ if (strVar == null) { return strVar; } StringBuffer strEsc=new StringBuffer(); for(int i=0;i