纯文本转超文本

本文介绍一种将纯文本转换成超文本的方法,使其转成的超文本内容在HTML页面中预览的效果与原纯文本预览的效果一致。

该转换可采用正则表达式搜索替换来实现,具体规则如下:

  • 将HTML中5个基本保留字符(<, >, &, ", ')转换成对应HTML实体("&lt;", "&gt;", "&amp;", "&quot;", "&apos;")
  • 将连续n(n>=2)个空格符(U+0020)替换为n个非间断空格符(U+00A0)的HTML实体("&nbsp;")
  • 将制表符(U+0009)替换为n(n一般为2,4或8)个"&nbsp;"
  • 将Windows换行符CR LF(U+000D U+000A)或Unix换行符LF(U+000A)替换为HTML换行标签("<br/>")

注:已命名的实体"&apos;"亦可用字符码实体形式“&#39;”表示,以兼容旧版Internet Explorer。

附:

纯文本转超文本Java实现

 

private static Pattern htmlKeychars=Pattern.compile("[<>&\"']");
private static Pattern htmlKeycharsWhitespace=Pattern.compile("\r\n|  {1,}|[<>&\"'\t\n]");

private static String encodeHTML(String s,Pattern p){
	Matcher m=p.matcher(s);
	StringBuffer sb=new StringBuffer(s.length()+(s.length()>>1));
	String re=null;
	while(m.find()){
		String $0=m.group(0);
		switch($0.charAt(0)){
		case '<':re="&lt;";break;
		case '>':re="&gt;";break;
		case '&':re="&amp;";break;
		case '"':re="&quot;";break;
		case '\'':re="&apos;";break;
		case ' ':re=StringUtils.repeat("&nbsp;",$0.length());break;
		case '\n':
		case '\r':re="<br/>";break;
		case '\t':re="&nbsp;&nbsp;&nbsp;&nbsp;";break;
		}
		m.appendReplacement(sb.append(re), "");
	}
	return m.appendTail(sb).toString();
}
public static String encodeHTML(String s){
	if(s==null||s.length()==0)
		return s;
	return encodeHTML(s,htmlKeycharsWhitespace);
}
public static String encodeHTMLAttribute(String s){
	if(s==null||s.length()==0)
		return s;
	return encodeHTML(s,htmlKeychars);
}

 

纯文本转超文本JavaScript实现:

 

(function(global){
	function StringRepeat(s,c){
		switch(c){
		case 0:return "";
		case 1:return s;
		case 2:return s+s;
		default:
			var r=repeat(s,c>>>1);
			return (c&1)==0?r+r:r+r+s;
		}
	}
	var repeat=String.prototype.repeat||function repeat(count){
		if(this==null)
			throw new TypeError("String.prototype.repeat called on null or undefined");
		if(count<0||count>0xFFFFFFFF)
			throw new RangeError("Invalid count value");
		return StringRepeat(String(s),c>>>0);
	};
	var escapeHTML=function(s,r){
		if(s.length==0)
			return s;
		return s.replace(r,function($0){
			var re="";
			switch($0.charAt(0)){
			case '<':re="&lt;";break;
			case '>':re="&gt;";break;
			case '&':re="&amp;";break;
			case '"':re="&quot;";break;
			case '\'':re="&apos;";break;
			case ' ':re=repeat.call("&nbsp;",$0.length);break;
			case '\n':
			case '\r':re="<br/>";break;
			case '\t':re="&nbsp;&nbsp;&nbsp;&nbsp;";break;
			}
			return re;
		});
	};
	function encodeHTML(s){
		return escapeHTML(String(s),/\r\n|  {1,}|[<>&"'\t\n]/g);
	}
	function encodeHTMLAttribute(s){
		return escapeHTML(String(s),/[<>&"']/g);
	}
	global.encodeHTML=encodeHTML;
	global.encodeHTMLAttribute=encodeHTMLAttribute;
}(this));

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值