【问题标题】:Using Javascript to format an HTML string to display properly使用 Javascript 格式化 HTML 字符串以正确显示
【发布时间】:2019-06-26 08:04:06
【问题描述】:

后端传递一个字符串,显示如下:

"Hello, <br><br> This notice is to inform you that you are in violation of <font color=red><b>HR POLICY XXXXX</b></font>."

这个页面的重点是让你轻松复制粘贴预先生成的电子邮件,但不需要通过句子喷出一堆 html 标签。

有问题的字符串在 id 为“textBlock”的 a 内。

后端是带有 Oracle DB 的 Java。我可以在某种程度上编辑java,我根本无法触及数据库。我已经使用控制台来处理字符串,并且在完成编辑后以任何方式对其进行编辑似乎可以使其正确显示。 innerText 包括我的摘要中的标签,innerHTML 显示像
.

这样的标签

到目前为止,我已经尝试提供一个 onload 属性,该属性调用一个名为 formatText(); 的函数;这样做: temp var = document.getElementById("textBlock").innerText; document.getElementById("textBlock").innerText = var;

以及上面的函数用innerHTML 代替innerText。我也尝试过使用 document.write();但这会清除页面的其余部分。最后我在字符串前面添加了一些随机字符并尝试使用 replace("!@#","") 函数来替换那些以模仿“编辑我注意到它似乎以任何方式使其正确显示。

java

out.println("<td align=left id=textBlock onload=formatText();> !@#" + strTemp + "</td>" );

预期:

你好,

本通知旨在通知您,您违反了HR POLICY XXXXX

实际:

Hello, <br><br> This notice is to inform you that you are in violation of <font color=red><b>HR POLICY XXXXX</b></font>.

【问题讨论】:

  • 似乎字符串中的 HTML 标签不是真正的 HTML 标签,而是用实体(<>)编码,这使得它们看起来像 HTML,但没有被解析为这样.你检查过源字符串吗?
  • 你试过document.getElementById("textBlock").innerHTML = The_String_That_You_Get_From_Backend;
  • @Pantalaimon 我找了一个拥有数据库访问权限的人来检查数据库,它们被存储为
    等...而不是编码实体。
  • @Enzy 我试过 var placeholder = document.getElementById("textBlock"); document.getElementById("textBlock").innerHTML = placeholder.innerHTML;这应该会产生相同的结果。我也尝试用 innerText 代替 innerHTML 看看这是否会有所作为。都没有工作:(
  • @CasinoRoyale 在out.println-ing 数据之前是否对 DB 查询的输出进行了任何处理可能会改变它?或者您在查询中使用了类似HTP.ESCAPE_SC 的过程?

标签: javascript java html


【解决方案1】:

如果我理解正确的话,你想要的是一些剥离 html 标签的功能。你可以使用正则表达式

var str = "Hello, <br><br> This notice is to inform you that you are in violation of <font color=red><b>HR POLICY XXXXX</b></font>."

console.log(str)

var str2 = str.replace(/<[^>]*>?/gm, '')

console.log(str2)

如果你想让html元素渲染你的html,你需要使用DOM属性innerHtml

var str = "Hello, <br><br> This notice is to inform you that you are in violation of <font color=red><b>HR POLICY XXXXX</b></font>."

document.getElementById('myDiv').innerHTML = str
&lt;div id="myDiv"&gt;Hi&lt;/div&gt;

【讨论】:

  • 我希望标签被读取为 html 并导致文本格式化,而不仅仅是一个带有标签的字符串。我已经更新了上面的实际与预期,以尝试更好地反映这一点
  • @CasinoRoyale 进行了相应的编辑。那样行吗?有任何问题告诉我
【解决方案2】:

(在 cmets 中解决,为完整性添加答案)

当 HTML 标记在浏览器中可见时,通常使用 html-entities 对其进行编码,以防止其被解析为 HTML。在这种情况下,后处理脚本将 &amp;lt;&amp;gt; 字符替换为它们的实体对应物 &amp;lt;&amp;gt;

禁用这些替换可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-24
    • 2022-01-13
    • 1970-01-01
    • 2017-09-25
    • 2021-11-28
    • 2014-01-17
    • 1970-01-01
    • 2018-06-21
    相关资源
    最近更新 更多