您好我希望能够使用Python在MySQL中存储文本,这将保留任何换行符。我正在使用replace('\n', '<br>')
,它工作正常,直到我意识到每当文本有撇号时,MySQL就会出错,所以我做了con.escape_string(text)
但现在这消除了替换的影响所以我有一个巨大的杂乱段落发布了。
基本上长话短说,如何实现cgi.escape(以避免HTML),一种在没有错误的情况下在MySQL中存储撇号和其他符号的方法,以及一种节省换行符的方法。那么一个 用户可以提交类似这样的文本,MySQl可以存储它,然后可以在提交时最初查看的页面上打印。
谢谢!
答案 0 :(得分:3)
如果返回字符和撇号的存在导致您出现问题,则很可能是您以错误的方式写入数据库。我怀疑你所做的是:
cursor.execute("INSERT INTO table VALUES('%s')" % value)
您要传递要存储的数据,作为SQL语句的一部分。这通常是错误的方法,特别是如果您使用用户提供的数据,因为这会暴露您的安全问题,例如SQL注入攻击。您应该永远将用户提供的数据放入SQL语句中,除非您非常小心。
正确的方法是:
cursor.execute("INSERT INTO table VALUES(?)", (value,))
使用问号指示要插入的数据,并将实际数据作为元组的一部分传递给第二个参数。这大大简化了事情,意味着您可以存储所需的任何数据,而不必逃避它,或担心安全问题。
答案 1 :(得分:0)
这两个是完全不同的问题,
替换str.replace('\n', '<br>')
完全是基于html的更改。您可以在选择之后但在使用该数据渲染html之前,在存储到数据库之前随时进行。
其中存储撇号(')是基于sql的问题。你需要用双撇号('')替换所有撇号('),用斜杠替换所有逗号(,),然后用逗号(/,)将数据正确存储到数据库中。
str.replace("'", "''") # replacing apostrophes by double apostrophes
str.replace(",", "\,") # replacing comma by slash-comma