如何处理来自用户输入的加号作为输入字符串的一部分而不是作为concat运算符?

时间:2012-02-08 00:31:08

标签: javascript jquery asp.net

这是一个小型内部工具,可以让少数人查询数据库。查询的加号如下:

SELECT SUBSTRING(DateName(month,CreatedOn),0,4) + ' - ' + SUBSTRING(CAST(Year(CreatedOn) AS varchar(10)),3,3) as Month, Year(CreatedOn) as Year,

使用jquery ajax调用

将查询传递给服务器
 var d = "query=" + $("#txtQuery").val();
            $.ajax({
                type: 'GET',
                url: '/Reports/GetReport',
                data: d,

然而,我收到服务器错误并进行调试我发现服务器上的查询缺少加号。即。

 SELECT SUBSTRING(DateName(month,CreatedOn),0,4)  ' - '  SUBSTRING(CAST(Year(CreatedOn) AS varchar(10)),3,3) as Month

来自FireBug,

localhost:1489/Reports/GetReport?query=SELECT%20SUBSTRING(DateName(month,CreatedOn),0,4)%20+%20%27%20-%20%27%20+%20SUBSTRING(CAST(Year(CreatedOn)%20AS%20varchar(10)),3,3)%20as%20Month,%20Year(CreatedOn)%20as%20Year..

如何确保将plus视为输入字符串的一部分而不是作为concat运算符,这似乎就是这里的情况。

3 个答案:

答案 0 :(得分:5)

“+”被视为URI中的空格。

使用encodeURIComponent

答案 1 :(得分:1)

或者你只是避免使用+

SELECT CONAT(SUBSTRING(DateName(month,CreatedOn),0,4), ' - ', SUBSTRING(CAST(Year(CreatedOn) AS varchar(10)),3,3)) as Month, Year(CreatedOn) as Year,..

答案 2 :(得分:0)

当通过HTTP传输时,+不会被转义,因此您需要在客户端上手动转义它,然后在使用它之前将其转发到服务器上。