Java 中escape()和unescape()的使用
(2009-05-19 17:37:47)
转载▼
标签: it |
1.js中的中escape()和unescape()的使用
2.Java 中escape()和unescape()的使用实例
java代码:自己定义的编译和反编译函数,直接引用就可以了。
public class EscapeUnescape {
public static String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j)
|| Character.isUpperCase(j))
tmp.append(j);
else if (j < 256) {
tmp.append("%");
if (j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
} else {
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
public static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(src
.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
} else {
ch = (char) Integer.parseInt(src
.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
} else {
if (pos == -1) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
} else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
}
jsp中部分代码:
<%@ page contentType="text/html;charset=gb2312" language="java" %>
<%@ taglib uri="/WEB-INF/taglib/labour.tld" prefix="labour"%>
<%
String pub_remark = "remark.pub_remark_DW";
String claimId = request.getParameter("mainId");//赔案表ID
String taskName = request.getParameter("taskName");//任务名称
%>
<html>
<head>
<title>公共备注栏</title>
<script type="text/javascript" language="javaScript">
function saveRemark() {
var remark = escape(document.forms(0).remark.value);
if(remark == null || remark == "") {
alert("请您先输入备注栏信息,然后再保存!");return;
}else {
var param = "<%=taskName%>,"+"<%=claimId%>,"+remark;
var flag = tool.sendXml(["<%=pub_remark%>"],"remarkAction","savePubRemarkInfo",param);
}
}
</script>
</head>
<labour:base />
<labour:body bgcolor="#E6F2F9">
<labour:form action="null" method="POST">
<table width="600" align="center">
<tr class=JXDwCommon>
<td noWrap align=left><TEXTAREA class=JXHTCInput style="WIDTH: 720px" name=remarkrows=3 type="textarea" maxlength="500"></TEXTAREA></td>
</tr>
</table>
</labour:form>
</labour:body>
</html>
将上面的值编译后传到后台:
如果字符串格式是如下形式:中间含有enter符号 ,经过escape() 函数编译后变成”%0D%0A“
需要过滤过来如下代码:
String remark2="";
String remark3="";
boolean flag = false;
if(remark.indexOf("%0D%0A")!=-1){
flag = true;
String[] arr = remark.split("%0D%0A");
for(int i=0;i<arr.length;i++){
remark2 +=arr[i];
}
}
if(flag){
remark3 = remark2;
}else{
remark3 = remark;
}
//冯伟 2009-05-19
pubRemarkVo.setCTaskRemark(EscapeUnescape.unescape(remark3));