在Dart中转义字符串中的单引号和双引号

时间:2018-10-07 05:18:38

标签: string dart flutter

我正在创建一个基本的聊天应用程序。它涉及一个文本字段,用户可以在其中输入任何文本并单击发送按钮。

该应用程序对于您在文本框中输入的任何字符串(包含引号的字符串)都可以正常工作。尝试将字符串添加到sql数据库时,由于引号未转义,因此出现数据库异常。

在字符串上执行replaceAll("'", "\'").replaceAll('"', "\'")就像在sql查询中使用双引号一样,但是现在所有的双引号都是单引号。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

数据库是否支持绑定参数?如果不是,您用来与数据库对话的包是否具有字符串转义功能?

与手动操作相比,这些方法会更好,尤其是因为用户输入中除了引号之外可能存在非常不安全的内容。如果您手动将查询字符串组合在一起并将其发送到数据库,那么它将容易受到SQL攻击。

对于您的紧迫问题,您将在两个地方都用单引号代替。假设您可以通过在斜杠前加反斜杠来使报价转义,则其外观应类似于.replaceAll('"', '\\"')

寻找一种更安全的方式来清理用户输入。

答案 1 :(得分:1)

在Dart中运行查询SQL的最佳,最安全的方法是使用绑定参数。

例如,如果您使用sqflite,则需要使用?以这种方式在列表中传递参数。作为查询中的通配符:

插入

int id2 = await txn.rawInsert(
      'INSERT INTO Test(name, value, num) VALUES(?, ?, ?)',
      ['another name', 12345678, 3.1416]);

更新

int count = await database.rawUpdate(
    'UPDATE Test SET name = ?, value = ? WHERE name = ?',
    ['updated name', '9876', 'some name']);

删除

count = await database
    .rawDelete('DELETE FROM Test WHERE name = ?', ['another name']);