`
aaronwong1989
  • 浏览: 2441 次
  • 性别: Icon_minigender_1
  • 来自: 山东
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
不完全代码

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

<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>

  • form表单提交后,后续处理交由业务流程sendInstantMgrFlow来处理

  • 业务流程sendInstantMgrFlow是处理一系列操作步骤的集合,在其中加入一步UrlDecodeStep

<?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;
	}

}


  • 控制台输出

---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
0
0
分享到:
评论

相关推荐

    XML高级编程pdf

    5.1.5 特殊的XML DOM实例— HTML DOM 5.2 使用DOM 5.2.1 DOM API 5.2.2 客户端和服务器端 5.2.3 DOM在出版过程中的应用 5.3 使用DOM和XML的应用实例 5.3.1 简单的客户端实例 5.3.2 更复杂的编程实例 5.4 ...

    html URL 編碼解碼器

    假如你經常處理html和xml文件,你會發現假如把一個完整的html文件存儲到xml的一個屬性中,系統會自動處理像&lt;,&gt;等特殊字符成&lt; &gt;。有時需要手動處理一些,那麼手頭沒有相應的工具是煩人的一件事,其實.net裡面...

    XML 高级编程(高清版)

    5.1.5 特殊的XML DOM实例— HTML DOM 5.2 使用DOM 5.2.1 DOM API 5.2.2 客户端和服务器端 5.2.3 DOM在出版过程中的应用 5.3 使用DOM和XML的应用实例 5.3.1 简单的客户端实例 5.3.2 更复杂的编程实例 5.4 ...

    XML高级编程 (Extensible Markup Language)

    5.1.5 特殊的XML DOM实例— HTML DOM 5.2 使用DOM 5.2.1 DOM API 5.2.2 客户端和服务器端 5.2.3 DOM在出版过程中的应用 5.3 使用DOM和XML的应用实例 5.3.1 简单的客户端实例 5.3.2 更复杂的编程实例 5.4 ...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    所以我们相信,XML做为一种先进的数据处理方法,将使网络跨越到一个新的境界。 六. XML的严格格式 吸取HTML松散格式带来的经验教训,XML一开始就坚持实行"良好的格式"。 我们先看HTML的一些语句,这些语句在HTML中...

    XML高级编程

    5.1.5 特殊的XML DOM实例— HTML DOM 117 5.2 使用DOM 120 5.2.1 DOM API 120 5.2.2 客户端和服务器端 121 5.2.3 DOM在出版过程中的应用 122 5.3 使用DOM和XML的应用实例 125 5.3.1 简单的客户端实例 125 5.3.2 更...

    NET公共类库[转发]

    HTML格式辅助类 HtmlUtils.cs 处理HTML,脚本的特殊字符或过滤 数据压缩类 GZipHandler.cs 对传输的数据进行压缩 ?DLL Dll Name AjaxPro.dll AspNetPager.dll FreeTextBox.dll URLRewriter.dll Function Ajax控件 ...

    前端助手FeHelper插件

    当web前端程序与后台进行数据交互的时候使用URL编码肯定是必不可少的了,但是我们往往需要预先知道这款字符编码以后的情况,以为与后台开发人员一同提前作出相应处理或对字符发送期间产生的问题进行排查。如果有特殊...

    JavaScript王者归来part.1 总数2

     9.4 字符串与文本处理--JavaScript棋谱阅读器(一)   9.4.1 需求分析--什么是棋谱和棋谱阅读器   9.4.2 系统设计--棋谱和棋盘数据的字符串描述   9.4.3 系统实现--解析和处理棋谱   9.4.4 完整的棋谱阅读...

    正则表达式经典实例.pdf

     处理单词、文本行、特殊字符和数值;  学习如何在URL、路径、标记语言和数据交换中使用正则  表达式;  学习更高深的正则表达式特性中的微妙之处;  理解在不同语言中正则表达式的APl、语法和行为之间的  ...

    正则表达式经典实例

     处理单词、文本行、特殊字符和数值;  学习如何在URL、路径、标记语言和数据交换中使用正则  表达式;  学习更高深的正则表达式特性中的微妙之处;  理解在不同语言中正则表达式的APl、语法和行为之间的 ...

    snoics-reptile 网页爬虫2.0

    1、snoics-reptile是什么? 是用纯Java开发的,用来进行网站镜像抓取的工具,可以使用配制文件中提供的URL入口, ... 实现了整站抓取的基本的功能,不能解析特殊的URL,对javascript无法辨认

    《javaScrip开发技术大全》源代码

    • sample03.htm JavaScript与HTML混合执行 • sample04.htm 在同一个网页中使用不同脚本语言 • sample05.htm 判断浏览器对JavaScript版本的支持情况 • sample06.htm 引用外部...

    Python Cookbook

    1.1 每次处理一个字符 6 1.2 字符和字符值之间的转换 7 1.3 测试一个对象是否是类字符串 8 1.4 字符串对齐 10 1.5 去除字符串两端的空格 11 1.6 合并字符串 11 1.7 将字符串逐字符或逐词反转 14 1.8 检查字符...

    Savedev Code Converter-crx插件

    当前实现的转换包括:-文本字符串到二进制-二进制到文本字符串-二进制到数字-数字到二进制-十六进制到数字(十进制)-数字(十进制)到十六进制-URL编码-URL解码-HTML编码特殊字符-HTML解码特殊字符-将XML转换为JSON...

    ASP200问.EXE

    53.如何解决URL含有特殊字符引发的错误 第4章 ASP组件 55.如何使用Browser Capabilities组件获取浏览器信息 56.如何使用Ad Rotator组件实现页面导航 57.如何使用Content Linking组件 58.如何使用File Access组件 ...

    jquery-1.1.3 效率提高800%

    processData(true) 数据类型: Boolean 在默认的情况下,如果data选项传进的数据是一个对象而不是字符串,将会自动地被处理和转换成一个查询字符串,以适应默认的content-type--"application/x-...

    JavaScript详解(第2版)

     2.5.3 [removed]URL 协议   2.6 JavaScript与旧浏览器或受限的浏览器   2.7 应知应会   练习   第3章 数据类型、字面量和变量   3.1 数据类型   3.1.1 基本数据类型   3.1.2 复合数据类型 ...

    Winson.Framework 1.0发布!

    &lt;br&gt;1、返回上一个页面的地址 2、获取当前请求的原始 URL(URL 中域信息之后的部分,包括查询字符串(如果存在)) 3、获得当前完整Url地址 4、过滤危险字符串 5、替换html中的特殊字符 6、恢复html中...

Global site tag (gtag.js) - Google Analytics