首先接受一個概念asp中只承認雙引號Access SQL中只承認單引號HTML由於其不嚴謹單雙引號都承認以上是我的一點經驗總結最終正確性還有待證實
在asp中要輸出一個雙引號需要使用轉義字符兩個雙引號("")
例如
要輸出字符串 abc 則 responsewrite("abc")
要輸出字符串 "abc 則 responsewrite("""abc") //兩邊的雙引號括起表示內部為一個字符串終於剩余兩個雙引號轉義輸出為一個雙引號
要輸出字符串 ab"c 則 responsewrite("ab""c")
要輸出一個雙引號 " 則 responsewrite("""") //這就是解釋了為什麼要寫四個雙引號了
此外還有另外一種方法就是使用ACSII字符
例如
要輸出 ab"c 則 responsewrite("ab" & chr() & "c")
接下來讓我們再看看SQL中的單引號問題我們考慮這個問題主要是為了允許自己在進行字符串數據庫處理的時候不至於出錯和防止SQL注入
來看看最簡單的SQL注入有一個留言板其表單有一個name項
在目標頁面有如下代碼
<%
name = RequestForm("name")
ConnExecute "Insert Into GuestBook (name) VALUES (’" & name &"’)"
%>
如果我們提交的name為 Jacky 則上面的SQL語句為 Insert Into GuestBook (name) VALUES (’Jacky’)很明顯這樣符合我們的本意
可是如果我們提交的是 I’m Jacky 則上面的語句變為 Insert Into GuestBook (name) VALUES (’I’m Jacky’) 然後不幸的事情發生了系統找到的第一個單引號是I’m中的單引號於是系統認為用戶想提交的字符串(包括引號)僅僅只是’I’接下來的 m Jacky’) 系統就無法解釋了於是就認為你的語法錯了
如何解決呢?那就是再進行數據庫處理前先將一個單引號替換為兩個單引號讓系統將其解釋為轉義字符代碼如下
<%
name = RequestForm("name")
name = Replace(name "’" "’’") //即 name = Replace(name chr() chr()&chr())
ConnExecute "Insert Into GuestBook (name) VALUES (’" & name &"’)"
%>
再提交 I’m Jacky SQL語句變為 Insert Into GuestBook (name) VALUES (’I’’m Jacky’) 在寫入數據的時候SQL會自動識別出兩個單引號的轉義字符從而最終寫入數據庫的數據則為 I’m Jacky 這就是我們所期待的正確結果
From:http://tw.wingwit.com/Article/program/net/201311/14083.html