【问题标题】:Encode HTML before POST在 POST 之前编码 HTML
【发布时间】:2011-02-04 14:20:06
【问题描述】:

我有以下脚本,它对它接收到的一些值进行编码,但它似乎没有对双引号进行编码。

如何在发布前正确编码完整值?

function htmlEncode(value){ 
    return $('<div/>').text(value).html(); 
} 

上面的脚本给了我这个:

&lt;p&gt;Test&amp;nbsp; &lt;span style="color: #ffffff"&gt;&lt;strong&gt;&lt;span style="background-color: #ff0000"&gt;1+1+1=3&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

我需要它给我这个:

&lt;p&gt;Test&amp;nbsp; &lt;span style=&quot;color: #ffffff&quot;&gt;&lt;strong&gt;&lt;span style=&quot;background-color: #ff0000&quot;&gt;1+1+1=3&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

编辑:后续问题: Encoded HTML in database back to page

【问题讨论】:

  • 看起来您正试图让客户端在将某些文本 HTML 提交到服务器之前使其安全。不要那样做。使内容 HTML 在离开系统时安全,而不是在进入系统时(尤其是在客户端上,因为它可以被篡改)
  • 为什么要在客户端做JS?
  • 你为什么要它给你&amp;quot;呢?除非您打算将数据插入到属性值中(您使用字符串而不是使用 DOM 或其他合理的 API 将数据混合在一起),否则您只使用 6 个字节,而 1 就可以了,并且更难阅读。跨度>
  • 我尝试发送服务器 html,但它不喜欢它:stackoverflow.com/questions/4897441/…
  • 你得到了不好的建议。你应该关闭过度敏感的过滤器,这样你就可以得到你想要接收的数据(然后小心处理它以保护自己免受 XSS 攻击)。

标签: html jquery post html-encode


【解决方案1】:

您不应该尝试使用 JavaScript 进行编码。

您应该在服务器端对其进行编码。

可以用 JavaScript 完成的任何事情都可以撤消。

如果您还检查它是否已在服务器上进行编码,则使用 JavaScript 对其进行编码是有效的,但请记住:可以禁用 JavaScript。

【讨论】:

  • 我尝试将标准 html 发布到服务器,但我收到一条错误消息,提示我正在尝试执行跨站点脚本或类似的操作。这是我尝试将 html 发送到服务器而不对其进行编码时的链接。 stackoverflow.com/questions/4897441/…
  • @oshirowanen 我猜你正在使用vb.net,你必须禁用页面验证才能获得原样的内容。
  • 您使用什么作为服务器端语言?
  • 在此处跟进问题:stackoverflow.com/questions/4899365/…
  • @GeorgeStocker 同意,但您的评论是不要使用 javascript 对内容进行编码,并且在发布之前有 100% 的有效时间来执行此操作。在这种情况下,我提到您不想在服务器端进行编码,其目的是在不禁用请​​求验证的情况下绕过发布 html 的限制。数据通常不应以编码方式存储,但应进行清理,否则您可能会遇到双重编码问题。
【解决方案2】:

什么George says is true。 但是,如果您必须在客户端对字符串进行编码,我建议您使用 JavaScript 的 encodeURIComponent()

【讨论】:

【解决方案3】:

我遇到了类似的问题。我只是在javascript中使用了replace方法。这是一篇不错的文章:http://www.w3schools.com/jsref/jsref_replace.asp

replace 方法的作用基本上是用您指定的替换字符交换或替换它找到的字符。

所以这个:

var str=' " That " ';
str = str.replace(/"/g,'&quot;');

将其登录到浏览器的控制台后,您会得到类似的东西

&quot; That &quot;

还有这个:

var str=' " That " ';
str = str.replace(/"/g,'blahblahblah');

将其登录到浏览器的控制台后,您会得到类似的东西

blahblahblah That blahblahblah

【讨论】:

    【解决方案4】:

    你可以在js中使用这个模块,不需要jQuery:

    htmlencode

    【讨论】:

      【解决方案5】:

      您可以重用 php.js 项目中的函数 - htmlentitiesget_html_translation_table

      【讨论】:

      • 确实应该在服务器端完成。无论如何,你应该使用htmlspecialchars() 而不是htmlentities()
      【解决方案6】:

      在客户端使用 escape(str)

      HttpUtility.UrlDecode(str, System.Text.Encoding.Default);在服务器端

      它对我有用。

      【讨论】:

      • 我不确定您是否理解了这个问题,这是专门要求将客户端代码提交给服务器。它也根本没有提到服务器,因此您包含的服务器代码很可能不相关。
      • 是的,安德鲁,你说得对。我给了他一个客户端编码的技巧。另外,如果有必要,我还建议他如何在服务器端处理它,
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 2011-07-26
      • 2013-09-10
      • 2011-02-06
      相关资源
      最近更新 更多