如何用JavaScript提取经htmlentities编码的HTML字符串纯文本
解决JavaScript提取双重编码HTML字符串的纯文本问题
别发愁,这个问题出在你的字符串是双重HTML编码的,所以直接用toString、unescape这类方法肯定不管用。我给你一个在AJAX回调里就能用的靠谱方案:
- 第一步:先把字符串解码两次,还原出原始的HTML结构
- 第二步:利用DOM元素的原生能力提取纯文本
具体代码示例:
// 假设AJAX返回的编码字符串是你提供的这段 const encodedStr = '<p><b><u style="background-color: rgb(255, 255, 0);"><font face="Comic Sans MS">adsasdasdasdasdas</font></u></b></p>'; // 在AJAX的success回调里调用这个方法 function getPlainText(encodedContent) { // 第一次解码:把&转成&,得到单编码的HTML实体 let onceDecoded = encodedContent.replace(/&/g, '&'); // 第二次解码:借助DOM元素把HTML实体转成真实标签,再提取文本 const tempDiv = document.createElement('div'); tempDiv.innerHTML = onceDecoded; // textContent兼容性比innerText更好,trim去掉多余空白 return tempDiv.textContent.trim(); } // 提取纯文本并追加到页面 const plainText = getPlainText(encodedStr); document.getElementById('target-container').textContent = plainText;
为啥之前的方法无效?因为你的字符串经历了两次编码:PHP的htmlentities先把<转成<,之后可能又被转了一次(比如输出时再次编码),最终变成了&lt;。必须解码两次才能拿到真实的HTML结构,再用DOM元素提取文本是最稳妥的方式——比自己写正则替换靠谱多了,毕竟正则很难覆盖所有HTML标签的边界情况。
内容的提问来源于stack exchange,提问作者Ameer Hamza
相关产品推荐
相关产品推荐

