我的目标是通过REST API检索HTML并将其转换为纯文本。然后,我通过另一个API将其发送到Slack,据我所知,Slack不接受HTML。
我正在使用一系列Regex脚本来完成此操作。
var noHtml = text.replace(/<(?:.|\n)*?>/gm, '');
var noHtmlEncodeSpace = noHtml.replace(/ /g, ' ');
var noHtmlEncodersquo = noHtmlEncodeSpace.replace(/’/g, "'");
var noHtmlEncodeldsquo = noHtmlEncodersquo.replace(/‘/g, "'");
var noHtmlEncodeSingleQuote = noHtmlEncodeldsquo.replace(/'/g, "'");
var noHtmlEncodeldquo = noHtmlEncodeSingleQuote.replace(/“/g, "`");
var noHtmlEncodeDoubleQuote = noHtmlEncodeldquo.replace(/"/g, "`");
var noHtmlEncoderdquo = noHtmlEncodeDoubleQuote.replace(/”/g, "`");
结果符合预期。但是,将HTML转换为纯文本似乎是JavaScript中一项常见的任务,那就是可以有一种更聪明的方法来实现它。
我是JavaScript新手。谢谢您的指导。
答案 0 :(得分:3)
您可以使用DOMParser
安全地将HTML字符串解析为文档,然后可以检索文档的textContent
:
const htmlStr = `<div>
foo ’’
</div>
<script>
alert('evil');
</` + `script>
<img src="badsrc" onerror="alert('evil')">`;
const doc = new DOMParser().parseFromString(htmlStr, 'text/html');
console.log(doc.body.textContent);
根据所需的文本间距,您可以改用innerText
属性:
doc.body.innerText
(例如,这与设置新创建的元素的innerHTML
相反,这样做并不安全-可以在textContent
被执行之前执行“邪恶”脚本检索到)