【问题标题】:Handling a input with HTML inside its value (using jQuery)处理值内包含 HTML 的输入(使用 jQuery)
【发布时间】:2011-11-01 22:16:44
【问题描述】:

我创建了一个类似于就地编辑插件的小功能。

它的作用:

  • 点击获取元素的html内容:var editable = $(this).html();
  • 创建文本输入字段(如果存在则获取):

    var input = ($('input', this).length > 0) ? $('input', this) : $('<input type="text" value="' + editable + '" />'),
    
  • 用输入替换元素文本:$(this).empty().append(input);

只有当可编辑文本不包含非编码的 HTML 字符时才有效。

如果它有像​​&lt;&gt;这样的HTML字符,它们会在第二步被转换为HTML代码,并弄乱输入元素......

我试图通过以下方式逃避它们:

editable = $('&lt;div/&gt;').text($(this).html()).html()

然后我得到一个带有转义 HTML 的文本输入 lol :)

我能做什么?

【问题讨论】:

  • 真正重要的字符是'"',因为它关闭了你的 value="" 属性。但是你需要非常小心 XSS 注入。
  • 是的" 似乎是问题所在,因为之后的所有文本都没有显示..
  • 您希望您的输入文本框只显示包含所有 HTML 标签的内容吗?还是要删除 HTML 标记并仅显示文本?

标签: javascript jquery html-entities


【解决方案1】:

您可以对字符串进行 HTML 转义,以便将其包含在 HTML 属性值中,如下所示:

var escaped = string.replace(/</g, '&lt;').replace(/'/g, '&#39;').replace(/"/g, '&#34;');

【讨论】:

  • 这工作谢谢。我现在在不同的地方遇到了问题,但我想我可以解决它们:)
猜你喜欢
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
相关资源
最近更新 更多