XML、HTML、URL特殊字符的处理

[b] :arrow: 不完全代码 [/b]

[list]
[*]form表单提交时,调用一个js函数将需要特殊处理的字段使用encodeURIComponent()方法进行编码。
[/list]

<html>
<form name="instantMgrSendForm" action="<%=path + jspCtxSer.getRequestServletUrl()%>" method="post" onsubmit="return validate()">
<%=jspCtxSer.getRequiredHtmlHiddenFields(null,"sendInstantMgrFlow")%>
<textarea id="body" name="body" style="width: 300px; height: 80px">
</textarea>
<input id="submit" value="发送" type="submit" />
</form>
</html>


<script language="JavaScript" src="<%=path%>js/jquery.js"></script>
<script language="javascript">
function validate(){
$('#body').val(encodeURIComponent($('#body').val()));
return true;
}
</script>

[list]
[*]form表单提交后,后续处理交由业务流程sendInstantMgrFlow来处理
[/list]
[list]
[*]业务流程sendInstantMgrFlow是处理一系列操作步骤的集合,在其中加入一步UrlDecodeStep
[/list]

<?xml version="1.0" encoding="UTF-8"?>
<SelfDefTransFlow>
<TransactionFlow id="sendInstantMgrFlow"
transFlowContext="sendInstantMgrCtx"
refTransTemplate="authCheckTransTemplate">
<transStep id="UrlDecodeStep" names="body" enCoding="UTF-8"
class="com.sunyard.cbif.sms.transSteps.UrlDecodeStep">
<transition id="0" dest="next" />
<transition id="Other" dest="setErrorPageStep" />
</transStep>
<transStep id="sendInstantMgrStep" fromNO="" funcode="SMS001"
format="15"
class="com.sunyard.cbif.sms.transSteps.SendInstantMgrStep">
<transition id="0" dest="next" />
<transition id="Other" dest="setErrorPageStep" />
</transStep>
<transStep id="sqlAccessTransStep" serviceName="getSYSData"
targetScope="root">
<transition id="0" dest="next" />
<transition id="Other" dest="setErrorPageStep" />
</transStep>
<transStep id="sendSMSBySocketStep" funcode="SMS001"
class="com.sunyard.cbif.sms.transSteps.SendSMSBySocketStep">
<transition id="0" dest="SetLogForSendInstantMgrStep" />
<transition id="Other" dest="setErrorPageStep" />
</transStep>
<transStep id="setSuccessPageStep"
class="com.sunyard.cbif.transSteps.SetReplyPageTransStep"
on0Do="end"
onOtherDo="setErrorPageStep"
pageName="sms/instantMgrSendResult.jsp" />
<transStep id="setErrorPageStep"
class="com.sunyard.cbif.transSteps.SetReplyPageTransStep"
onOtherDo="end" pageName="error.jsp" />
<refFormat alias="inputSendMsgFmt" refId="inputSendMsgFmt" />
<refFormat alias="outputSendMsgFmt" refId="outputSendMsgFmt" />
</TransactionFlow>
<context id="sendInstantMgrCtx" type="transFlow">
<refKColl refId="sendInstantMgrColl" />
<refService refId="getSYSData" />
</context>
<kColl id="sendInstantMgrColl">
<iColl id="msgIColl">
<kColl>
<field id="funcode" des="功能码" />
<field id="id" des="短信渠道自动为每一条新的短信生成,方便查询" />
<field id="channel" des="发送请求的渠道应用在短信平台注册的编号" />
<field id="type" des="短信类型:100宣传短信,101业务短信" />
<field id="prio" des="短信发送优先级 0:普通1:重要2:最高" />
<field id="sdate" des="短信的发送开始日期" />
<field id="edate" des="短信的最迟发送日期" />
<field id="stime" des="短信的发送开始时间" />
<field id="etime" des="短信的最迟发送时间" />
<field id="to"
des="短信接受人的手机号码(发送给多个手机号码时,号码之间用“,”号分隔)" />
<field id="sp" des="接收短信运营商" />
<field id="from" des="短信的发送人的手机号码" />
<field id="sender" des="短信发送者" />
<field id="format" des="信息格式:15为普通短信" />
<field id="body" des="短信的内容" />
</kColl>
</iColl>
</kColl>
<SQLAccessService id="getSYSData" dbResource="CBIFJDBC">
<JDBCSQLStatement
exp="select smshost, smsport from sms_sysdataconfig">
<ResultMap columnName="smshost" dataName="SMSHost" />
<ResultMap columnName="smsport" dataName="SMSPort" />
</JDBCSQLStatement>
</SQLAccessService>
</SelfDefTransFlow>


/*
* @(#)UrlDecodeStep.java 1.0 2011-12-09
*
* Copyright (c) 2009 Sunyard System Engineering Co., Ltd.
* All rights reserved.
*
* This software is the confidential and proprietary information of
* Sunyard System Engineering Co., Ltd. ("Confidential Information").
* You shall not disclose such Confidential Information and shall use it
* only in accordance with the terms of the license agreement you entered
* into with Sunyard.
*/

package com.sunyard.cbif.sms.transSteps;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;

import com.sunyard.cbif.etp.base.Context;
import com.sunyard.cbif.etp.base.ETPConstance;
import com.sunyard.cbif.etp.base.ETPObjectNotFoundException;
import com.sunyard.cbif.etp.base.TransactionFailException;
import com.sunyard.cbif.etp.base.TransactionStep;

/**
* 用于对页面送过来的经encodeURIComponent()的字段进行解码和
* 特殊字符的半全角转换
* @version 1.0
* @author Aaron
*
*/
public class UrlDecodeStep extends TransactionStep {

private static final long serialVersionUID = 1L;
private String enCoding = "UTF-8";

public UrlDecodeStep() {
super();
}
@Override
public int execute(Context context) throws TransactionFailException,
Exception {
try {
enCoding = super.getParamValue("enCoding");
String tnames = super.getParamValue("names");
String[] names = tnames.split(",");
for (int i = 0; i < names.length; ++i) {
String value = (String) context.getValueAt(names[i]);
if (value != null)
if (!value.trim().equals(""))
context.getElementAt(names[i]).setValue(Decode(value));
else
context.getElementAt(names[i]).setValue("");
}
} catch (ETPObjectNotFoundException e) {
ETPConstance.sendMessageToMonitor(e);
return 1;
} catch (UnsupportedEncodingException er) {
ETPConstance.sendMessageToMonitor(er);
return 1;
}
return 0;
}

/**
* 根据enCoding解码 *
* @throws UnsupportedEncodingException
*/
private String Decode(String src) throws UnsupportedEncodingException {
System.out.println("---UrlDecodeStep-1-解码前的短信内容---〉" + src);
src = URLDecoder.decode(src, this.enCoding);
System.out.println("---UrlDecodeStep-2-解码后的短信内容---〉" + src);
/* 避免打乱xml报文将所有半角的xml标记替换为全角字符 */
src = Half_shape_to_Full_shape(src);
System.out.println("---UrlDecodeStep-3-替换xml特殊字符为全角字符的短信内容---〉" + src);
return src;
}

/**
* 特殊xml、html字符转换为全角字符
*/
private String Half_shape_to_Full_shape(String src) {
src = src.replace('<', '<');
src = src.replace('>', '>');
src = src.replace('/', '/');
src = src.replace('\\', '\');
src = src.replace('&', '&');
src = src.replace('|', '|');
src = src.replace('#', '#');
return src;
}

}


[list]
[*]控制台输出
[/list]

---UrlDecodeStep-1-解码前的短信内容---〉Hello%20World!%E4%BD%A0%E5%A5%BD%EF%BC%81%0D%0A%3Cbr%2F%3E%0D%0A%3Ca%20href%3D%22Hello.Action%3FName%3DAaron%26passwd%3D123456%22%3E%0D%0A%7C%40%7C%23%7C%24%7C%25%7C%5E%7C%26%7C*%7C!%7C-%7C%5C%7C%C2%B7%7C%C2%B7%7CEND
---UrlDecodeStep-2-解码后的短信内容---〉Hello World!你好!
<br/>
<a href="Hello.Action?Name=Aaron&passwd=123456">
|@|#|$|%|^|&|*|!|-|\|·|·|END
---UrlDecodeStep-3-替换xml特殊字符为全角字符的短信内容---〉Hello World!你好!
<br/>
<a href="Hello.Action?Name=Aaron&passwd=123456">
|@|#|$|%|^|&|*|!|-|\|·|·|END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值