JavaScript有没有类似于C#的HttpUtility.HtmlEncode的等价物?

4
可能重复:

参考:
JavaScript/jQuery HTML编码

我正在将信息作为Json传递给客户端,然后从我的JavaScript代码生成一些HTML。我有一个称为“name”的字段,我将其传递到图像的标题中,如下所示:

  html.push("<img  title='" + person.Name + "' src . . . 

问题是如果人名为 "Joe O'Mally",当我在图片上悬停时,它只显示为 "Joe O"(因为名字中有 ' 符号)。
我不想在服务器端去掉 ',因为还有其他地方需要在页面上显示完整的字符串。
是否有类似于 HttpUtility.HtmlEncode 的 JavaScript 等效方法,可以在我悬停在图片上时显示完整的姓名?

2
请看一下这篇早期的帖子:https://dev59.com/iHM_5IYBdhLWcg3wzmnL - immutabl
或者 https://dev59.com/e1HTa4cB1Zd3GeqPOQ5a(以及可能还有很多) - Lucero
2个回答

16

不过你可以很容易地编写一个。

function htmlEnc(s) {
  return s.replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/'/g, '&#39;')
    .replace(/"/g, '&#34;');
}

我已经尝试过各种方式来加速这个操作(基本上是通过一次“替换”调用来完成),但这种方式在大多数情况下表现良好,尤其是在现代浏览器中。


@Lucero 这是个习惯问题 :-) 如果你更喜欢的话,你可以使用"""。 - Pointy
我喜欢使用它是因为它帮助我这颗脑袋不太好的大脑记住哪个是哪个:apos 是没有 HTML 4 实体定义的那个,所以必须像这样进行转义,但除此之外,我更喜欢使用命名实体来提高清晰度。 - Lucero
2
将空格转换为&nbsp;是非常错误的做法,同样地,将换行符转换为<br/>也是(特别是在HTML5文档中,自闭合标签并不真正有意义)。关键是要防止运行文本被解释为元字符,但不改变语义。例如,在以前只有普通空格的地方引入不间断空格会使文本呈现出相当不正确的形式。 - Pointy
2
@Servy,你正在编写的是将纯文本转换为HTML的内容。然而,问题是关于转义那些在HTML中使用会非法或改变文本含义的字符。我不知道有任何库可以显著地做到这一点,无论是.NET HtmlEncode还是jQuery或其他JS工具集提供的函数都没有做任何其他事情。可以争论是否应该对某些特殊字符(例如&#160;)进行编码,以确保在基于文本的传输中的完整性,但实际上这并不是HtmlEncode方法的责任。 - Lucero
1
也要注意,顺序很重要。我已经完成了一部分,并从上面添加了几个替换方法。我添加了一个“&”的替换方法,这是一个不好的想法,因为在它之前发生的所有编码都将使用“&”进行编码,因此它们将被重新编码,除非你对此进行解码... 把“&”放在编码的开头和解码的结尾。 - yougotiger
显示剩余5条评论

-3

这里有一篇很好的文章,解释了javascript中escape()和unescape()函数的使用,这些可能会对你正在尝试做的事情有所帮助。


2
不会的。这些函数是关于转义URL语法中的字符,而不是HTML语法。 - Pointy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接