纯文本中识别URI地址并转换成HTML
来源:互联网 发布:淘宝客进入等级 编辑:程序博客网 时间:2024/04/30 07:53
问题
有一段纯文本text
, 欲将其插入DOM节点div
中. text
中可能有超链接, 邮件地址等. 如果有, 识别之.
分析
- 如果只是纯文本, 插入
div
中, 只要将div.innerText
设置为text
即可. text
中的URI地址可以用正则识别, 并将其替换为<a/>
标签组成的字符串. 此时text
变成了HTML字符串html
.- HTML字符串
html
可以赋值给div.innerHTML
. 但如果原text
中存在HTML语义的 字符串呢? 因此, 在识别URI之前, 需要将原text
作转义.
解决
uri-recognition.js
(function () { var trim = function (s) { /*jslint eqeq:true*/ if (s == null || s === '') { return ''; } // s 空格 // 制表符 // xA0 non-breaking spaces // 3000中文空格 return String(s).replace(/^[sxA03000]+/, ''). replace(/[sxA03000]+$/, ''); }, startsWith = function (s, sub) { s = String(s); return s.indexOf(sub) === 0; }, test = function (str) { /*jslint maxlen: 100*/ var URI_REG = /(https?://|www.|ssh://|ftp://)[a-z0-9&_+-?/.=#]+/i, MAIL_REG = /[a-z0-9_+-.]+@[a-z0-9_+-.]+/i; str = trim(String(str)); return URI_REG.test(str) || MAIL_REG.test(str) || false; }, /** * @param {String} str * @param {Function} replacer */ replace = function (str, replacer) { /*jslint maxlen: 100*/ var URI_REG = /(https?://|www.|ssh://|ftp://)[a-z0-9&_+-?/.=#]+/gi, MAIL_REG = /[a-z0-9_+-.]+@[a-z0-9_+-.]+/gi; str = trim(String(str)); str = str.replace(URI_REG, function (match) { var newStr = replacer({ mail: false, fullURI: startsWith(match.toLowerCase(), 'www.') ? ('http://' + match) : match, match: match }); /*jslint eqeq: true*/ return newStr == null ? match : newStr; }); str = str.replace(MAIL_REG, function (match) { var newStr = replacer({ mail: true, fullURI: 'mailto:' + match, match: match }); /*jslint eqeq: true*/ return newStr == null ? match : newStr; }); return str; }, uriRecognition = function (text) { var doc = document, html; text = trim(String(text)); if (test(text)) { //use {} to escape text = text.replace(/{<}/g, '{{<}}'). replace(/{>}/g, '{{>}}'). replace(/</g, '{<}'). replace(/>/g, '{>}'); html = replace(text, function (info) { if (!info || !info.match || !info.fullURI) { return null; } var link = doc.createElement('a'); link.setAttribute('href', info.fullURI); /*jslint eqeq: true*/ if (link.innerText != null) { link.innerText = info.match; } else if (link.textContent != null) { link.textContent = info.match; } return link.outerHTML; }); html = html.replace(/{<}/g, '<'). replace(/{>}/g, '>'); return { content: html, isPlainText: false }; } return { content: text, isPlainText: true }; }, setContentWithURIRecognition = function (el, text) { var result = uriRecognition(text); if (!result) { return; } if (result.isPlainText) { if (el.innerText != null) { el.innerText = result.content; } else if (el.textContent != null) { el.textContent = result.content; } } else { el.innerHTML = result.content; } }; window.uriRecognition = uriRecognition; window.setContentWithURIRecognition = setContentWithURIRecognition;})();
test.html
<!DOCTYPE HTML><html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>uri regcognition</title> </head> <body> <script src="./uri-recognition.js" type="text/javascript"></script> <script type="text/javascript"> var text = '<a href="http://china.haiwainet.cn/n/2014/0509/c232587-20619235.html" ' + 'mon="ct=1&a=2&c=top&pn=8" target="_blank">' + '纽约时报:阿里巴巴IPO将风险推向全新水平</a>' + ' send to example@example.com xxxx', div = document.createElement('div'); window.setContentWithURIRecognition(div, text); document.body.appendChild(div); </script> </body></html>
Chrome下测试OK.
0 0
- 纯文本中识别URI地址并转换成HTML
- html转换成纯文本
- Delphi把HTML转换成纯文本格式
- 将html格式的内容转换成纯文本格式
- C#实现将HTML转换成纯文本的方法
- 在文本中寻找 URI 地址
- PHP html 转换为纯文本
- js将html转换为纯文本
- PYthon 转换HTML到Text纯文本
- Convert HTML to Plain Text (把HTML文本转换成纯文本)
- Java把Html格式文本转换成纯文本的问题
- 从html中提出纯文本
- C#获取html中纯文本
- JAVA从html中提取纯文本
- Spring 4发送HTML/纯文本邮件并携带附件
- 从html富文本中提取纯文本
- Java实现从Html文本中提取纯文本
- 使用正则表达式将Html转换为纯文本
- boost常用记录
- STM32 中断
- 基于SharePoint组显示或隐藏SharePoint 2010 功能区
- 使用 Ratinal Purecoverage 进行 C++ 代码覆盖率分析
- android bitmap compress(图片压缩)
- 纯文本中识别URI地址并转换成HTML
- 单链表 java实现
- 可想而知
- Linux 高性能服务器编程——socket选项
- Java网络连接之HttpURLConnection与HttpClient 区别及联系(转)
- leetcode第一刷_Sqrt(x)
- 1023. 组个最小数 (20)
- JavaScript document对象
- scrollview