如何清除要插入到“ Carto Table”中的用户输入数据?

时间:2019-09-08 17:22:39

标签: javascript user-input cartodb

我有一个应用程序,可将用户提供的地理数据和用户输入的注释插入到Carto表中。 Carto SQL API通过通过q参数传递一个完整的PostgreSQL查询来工作。 如何在javascript中构造查询字符串以通过POST调用传递给API,以便单引号不会破坏我的查询?

目前我正在做类似的事情

var sql = "SELECT insert_data('" + user_input +"');";
$.ajax({type: 'POST',
        url: 'https://' + config.cartoUsername + '.carto.com/api/v2/sql', //Sending the data to Carto
        crossDomain: true,
        data: {"q": sql},
        dataType: 'json',
        success: function(responseData, textStatus, jqXHR) {
                            console.log("Data saved");
                        },
        error: function(responseData, textStatus, errorThrown) {
                            console.log("Problem saving the data");
                        }
                    });

如果我提交类似I'm here的内容,则会出现400错误

{"error":["syntax error at or near \"m\""]}

因为查询如下:

SELECT insert_data('I'm here');

2 个答案:

答案 0 :(得分:0)

尝试使用user_input的这种格式。

var user_input = "I am her";
console.log("SELECT insert_data(" + user_input +");");

此查询将类似于:SELECT insert_data(I am here);

答案 1 :(得分:0)

当前,我的解决方案是使用string.replace()a greedy global REGExp将任意数量的单引号加倍,并使用JSON.stringify()清除双引号。

  // Verify that the request originates from the application.
  if (req.getParameter("token").compareTo(pubsubVerificationToken) != 0) 
  {
      resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
      return;
  }