asp和SQL文法中引號的使用方法

來源:互聯網
上載者:User

首先接受一個概念:asp中只承認雙引號,Access SQL中只承認單引號,HTML由於其不嚴謹,單雙引號都承認。以上是我的一點經驗總結,最終正確性還有待證實。

在asp中,要輸出一個雙引號,需要使用逸出字元:兩個雙引號("")。
例如,
       要輸出字串 abc , 則 response.write("abc")
       要輸出字串 "abc , 則 response.write("""abc")              //兩邊的雙引號括起,表示內部為一個字串。終於剩餘兩個雙引號,轉義輸出為一個雙引號。
       要輸出字串 ab"c , 則 response.write("ab""c")
       要輸出一個雙引號 " , 則 response.write("""")              //這就是解釋了為什麼要寫四個雙引號了
此外,還有另外一種方法,就是使用ACSII字元
例如,
       要輸出 ab"c , 則 response.write("ab" & chr(34) & "c")


接下來,讓我們再看看SQL中的單引號問題。我們考慮這個問題,主要是為了允許自己在進行字串資料庫處理的時候不至於出錯,和防止SQL注入。
來看看最簡單的SQL注入,有一個留言板,其表單有一個name項。
在目標頁面,有如下代碼:
<%
       name = Request.Form("name")
       Conn.Execute "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 = Request.Form("name")
       name = Replace(name, "’", "’’")              //即 name = Replace(name, chr(39), chr(39)&chr(39))
       Conn.Execute "Insert Into GuestBook (name) VALUES (’" & name &"’)"
%>
再提交 I’m Jacky, SQL語句變為 Insert Into GuestBook (name) VALUES (’I’’m Jacky’), 在寫入資料的時候,SQL會自動識別出兩個單引號的逸出字元,從而最終寫入資料庫的資料則為 I’m Jacky ,這就是我們所期待的正確結果。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.