纯文本转超文本

来源:互联网 发布:spss22 mac版教程 编辑:程序博客网 时间:2024/09/21 09:25

本文介绍一种将纯文本转换成超文本的方法,使其转成的超文本内容在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
原创粉丝点击