您的位置:首页 > Web前端 > HTML

纯文本转超文本

2015-12-09 17:35 489 查看
本文介绍一种将纯文本转换成超文本的方法,使其转成的超文本内容在HTML页面中预览的效果与原纯文本预览的效果一致。

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

将HTML中5个基本保留字符(<, >, &, ", ')转换成对应HTML实体("<", ">", "&", """, "'")
将连续n(n>=2)个空格符(U+0020)替换为n个非间断空格符(U+00A0)的HTML实体(" ")
将制表符(U+0009)替换为n(n一般为2,4或8)个" "
将Windows换行符CR LF(U+000D U+000A)或Unix换行符LF(U+000A)替换为HTML换行标签("<br/>")
注:已命名的实体"'"亦可用字符码实体形式“'”表示,以兼容旧版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="<";break;
case '>':re=">";break;
case '&':re="&";break;
case '"':re=""";break;
case '\'':re="'";break;
case ' ':re=StringUtils.repeat(" ",$0.length());break;
case '\n':
case '\r':re="<br/>";break;
case '\t':re="    ";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="<";break;
case '>':re=">";break;
case '&':re="&";break;
case '"':re=""";break;
case '\'':re="'";break;
case ' ':re=repeat.call(" ",$0.length);break;
case '\n':
case '\r':re="<br/>";break;
case '\t':re="    ";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));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HTML TXT Escape