0

我有一个动态创建的服务器端的 html 字符串。

strHTML = "<td><a href""google.com"" onclick=""SaveToDatabase('" + arrString(0) + "','" + arrString(1) + "')""  

arrString(1) 的值为javascript:OpenDoc('ProductManual.pdf','vbShowDoc')

错误消息:应为“)”

如何编码此值以保存在数据库中,并在从数据库中检索它时对其进行解码?

4

4 回答 4

2

简单的

你应该替换'\'

(C#)

arrString(0)=arrString(0).replace("'",@"\'")
于 2011-09-19T18:17:53.947 回答
2

问题是你是 SaveToDatabase('whatever','javascript:OpenDoc('ProductManual.pdf','vbShowDoc')')""

请注意此处引用的问题。您在 'javascript 处有一个开引号,但您的结束引号在 OpenDoc(' 之后不是您的结束引号,因此使用 \' 您需要使用 \' 对您的报价进行编码

另见: http ://forums.asp.net/t/1047952.aspx

编辑:我看到 Mid787 击败了我,但我想提供一些额外的信息

于 2011-09-19T18:27:17.817 回答
1

每当您从用户或任何外部来源读取输入时,您应该始终始终将其转义,然后再尝试从中构建 SQL 命令。

一种方法是使用准备好的语句或存储过程,并使用内置函数调用来设置变量。然后该函数将处理任何转义。

如果您想要或需要手动构建 SQL,请编写一个函数来转义它。对于大多数 SQL 引擎来说,查找任何嵌入的单引号并将其加倍就足够了,即转

帕特奥哈拉说“你好”

进入

帕特奥哈拉说“你好”

一些 SQL 引擎还有其他需要转义的字符,例如在 Postgres 中,您还应该使用双反斜杠。

编写一个函数来做到这一点很容易,然后总是使用它。

我与程序员进行了多次对话,他们说他们在这种情况下没有打扰,因为他们认为不太可能有人会在这个特定领域输入报价。但通常我们进行对话的原因是因为有人这样做了。不分析!去做就对了!就像系安全带一样。您可以坐在那里计算在这次特定旅行中发生事故的几率,但为什么呢?聪明的司机总是把他的安全带系上,即使他所做的只是把车从车道上开到街上,这也是一种不经意的、自动的行为。聪明的数据库程序员总是转义输入字符串,因为你永远不知道。

于 2011-09-20T17:05:56.973 回答
0

如果您尝试传入一个字符串,例如

INSERT dbo.table(foo) VALUES('foo'bar');

您需要将撇号加倍:

INSERT dbo.table(foo) VALUES('foo''bar');

但是@John Hartsock 是绝对正确的:您不应该将临时连接的字符串发送到 SQL Server。如果你使用参数,你可以完全避免这个问题。

于 2011-09-19T18:26:14.030 回答