Javascript -使用innerHTML输出字符串*WITHOUT* html编码的特殊字符

Javascript - using innerHTML to output strings *WITHOUT* HTML-encoded special characters?

本文关键字:WITHOUT html 特殊字符 编码 字符串 使用 innerHTML 输出 Javascript      更新时间:2023-09-26

似乎JavaScript在通过innerHTML()函数输出内容时自动将某些特殊字符转换为HTML实体。这是一个问题,因为我需要能够输出<和>而不转换为gt;和lt;

这种自动转换可以被阻止、逆转或转义吗?到目前为止,无论我做什么,<和>总是自动编码到HTML实体中。

示例代码:

function DisplayQueries() {
    var IDs = ['AllOpenedINC','AllOpenedCRQ','AllClosedINC','AllClosedCRQ','SameDayINC','SameDayCRQ','NotSameDayINC','NotSameDayCRQ',
        'StillOpenINC','StillOpenCRQ','OpenOldINC','OpenOldCRQ','OtherQueuesINC','OtherQueuesCRQ']
    for (var i = 0; i < IDs.length; i++) {
        if (eval(IDs[i]))
            document.getElementById(IDs[i]).innerHTML = eval(IDs[i]);
    }
}

查询变量示例:

AllOpenedINC = "('Company*+' = '"test'" OR 'Summary*' = '"%test%'") AND ('Submit Date' >= '"" + theDate +
    " 12:00:00 AM'" AND 'Submit Date' <= '"" + theDate + " 11:59:59 PM'")" + nameINC;

你应该关注你想要完成的结果,而不是做这件事的方法。innerHTML()做编码,innerText()和textContent()也做编码。所以你应该解码你的字符串如果你想要<</p>

你可以使用这个unescapeHTML()函数来得到你想要的结果。

 function unescapeHTML() {
    return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
  }

我希望这对你有帮助。

我认为你的问题建立在一个错误的前提之上。做一个非常简单的测试:

document.getElementById("testdiv").innerHTML = '<h1><em>Hello</em></h1>';

如果这工作得很好,那么问题不在JS方面,而是你在系统中使用一些其他组件对你的字符进行html编码。

我知道是怎么回事了。没有简单的方法可以防止innerHTML将特殊字符转换为HTML实体,但是由于将DIV的内容复制到剪贴板时出现了问题(使用IE-only JS,因为这是在每个人都必须使用IE的政府环境中),我只是使用replace()函数将HTML实体重新转换回<和>。

可以使用jquery和.append()