我有一个动态创建服务器端的html字符串。
strHTML = "<td><a href""google.com"" onclick=""SaveToDatabase('" + arrString(0) + "','" + arrString(1) + "')""
arrString(1)的值是 javascript:OpenDoc('ProductManual.pdf','vbShowDoc')
错误讯息:预计')'
如何对此值进行编码以保存在数据库中,并在从数据库中检索时对其进行解码?
答案 0 :(得分:2)
<强>简单强>
您应该将'
替换为\'
(C#)
arrString(0)=arrString(0).replace("'",@"\'")
答案 1 :(得分:2)
问题在于你 SaveToDatabase( '无论', '的javascript:OpenDoc的(' ProductManual.pdf ' 'vbShowDoc')') “”
请注意此处引号的问题。你在'javascript上有一个开场报价,但你的结束报价是在OpenDoc之后('那不是你的收盘报价,因此使用'' 您需要使用\'
对报价进行编码另见: http://forums.asp.net/t/1047952.aspx
编辑: 我看到Mid787打败了我,但我想提供一些额外的信息
答案 2 :(得分:1)
每当您从用户或任何外部源读取输入时,在尝试从中创建SQL命令之前,您始终应始终逃避它。
执行此操作的一种方法是使用预准备语句或存储过程,并使用内置函数调用来设置变量。然后该函数将处理任何转义。
如果您想要或需要手工构建SQL,请编写一个函数来转义它。对于大多数SQL引擎,只需查找任何嵌入的单引号并将它们加倍即可,即转
帕特奥哈拉说'你好'到
Pat O''Hara说''你好''某些SQL引擎有其他需要转义的字符,就像在Postgres中一样,你也应该使用反斜杠。
写一个函数来做这个很容易,然后总是使用它。
我与程序员进行了很多对话,他们说他们在这种情况下并不打扰,因为他们认为没有人会在这个特定领域输入引用。但通常我们进行对话的原因是因为有人做了。不要分析它!去做就对了!这就像系好安全带。你可以坐在那里计算你在这次旅行中遇到意外的几率,但为什么呢?聪明的司机让他成为一个无意识的自动行动,只是总是戴上他的安全带,即使他正在做的是将车从车道移到街上。聪明的数据库程序员总是逃避输入字符串,因为你永远不知道。
答案 3 :(得分:0)
如果您尝试传入类似
的字符串INSERT dbo.table(foo) VALUES('foo'bar');
你需要加倍撇号:
INSERT dbo.table(foo) VALUES('foo''bar');
但是@John Hartsock是绝对正确的:你不应该向SQL Server发送特殊的连接字符串。如果您使用参数,则可以完全避免此问题。