【问题标题】:How to properly escape html sent as data in jQuery's .ajax function如何在 jQuery 的 .ajax 函数中正确转义作为数据发送的 html
【发布时间】:2010-11-08 20:54:20
【问题描述】:

更新:在 Firebug 中查看问题后,我立即发现了错误。这是一个令人尴尬的无与伦比的双引号,我一定以某种方式删除了。我一直在使用 Chrome 的开发者窗口。非常抱歉用完您的资源。但是,吸取教训! (“我希望。)

转义要发送到服务器的 html 字符的最佳方法是什么?我正在使用 jQuery、.ajax() 和 jsonp。

我正在编写一个小书签,它将当前页面的部分 html 发送到我的服务器。这是ajax调用:

jQuery.ajax({
    url: 'http://www.my_server.com/file.php?callback=?',
    dataType: 'jsonp',
    data: { someHtml: escape(jQuery(this).html().substring(0,1000)) },
    success: function() { // stuff },
    beforeSend: function(xhr) {
                  xhr.setRequestHeader('Content-type','text/html');
                },
    error: function() { // stuff }
});

我需要使用 JSONP,因此我不能使用 POST,这就是我截断 html 数据的原因。如果 html 是“不错的”,事情就会起作用,但如果它包含 javascript 不喜欢的字符,那么我就有问题了。我通过使用 escape() 解决了我的问题,但现在我认为我遇到了换行符和制表符问题。

Chrome 的开发控制台给了我同样的错误:

Uncaught SyntaxError: Unexpected token <

我认为这意味着某些字符正在导致 javascript 崩溃。我尝试了以下方法:escape()、encodeURI/Component()、serialize()、text(),但还没有任何效果。一开始我没有用beforeSend,但觉得应该试试,但没区别。

目前,我遇到了一些 html,其中有一个换行符,然后是一个制表符,然后是几个空格。我尝试使用 replace() 替换这些字符:

... .substring(0,1000).replace(/(\r\n|[\r\n])/g,'')

我在另一个站点上发现了这个正则表达式字符串,它应该替换回车和换行的各种组合。

我希望我已经足够清楚地解释了自己。这是我在 Stack Overflow 上的第一个问题,所以请放轻松。 :)

【问题讨论】:

  • 谢谢!但愿我不必问。头撞墙……

标签: jquery ajax jsonp escaping


【解决方案1】:

您无需转义或编码。 jQuery 将负责正确地对数据进行 URL 编码:

data: { someHtml: $(this).html().substring(0, 1000) },

【讨论】:

  • 谢谢达林。看起来我的问题与完全不同的东西有关,但我不知道是什么。我在一个非常简单的测试站点上将 statememt 简化为 $(this).text() 并且遇到了同样的问题。现在进一步研究。
  • @SeanO,也许您发布的服务器端脚本不允许请求中的某些特殊字符?例如,对于带有&lt;&gt; 之类的内容的ASP.NET 就是这种情况。您可以使用 FireBug 分析幕后发生的事情。
  • 向大家道歉。这是由我的服务器端 php 文件中的一个完全荒谬的语法错误(未闭合的引号)引起的。将立即设置语法突出显示。
猜你喜欢
  • 2020-10-19
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 2017-05-20
相关资源
最近更新 更多