複製鏈接
請複製以下鏈接發送給好友

轉義字符

鎖定
轉義字符(Escape character),所有的ASCII碼都可以用“\”加數字(一般是8進制數字)來表示。而C中定義了一些字母前加"\"來表示常見的那些不能顯示的ASCII字符,如\0,\t,\n等,就稱為轉義字符,因為後面的字符,都不是它本來的ASCII字符意思了。 [1] 
中文名
轉義字符
外文名
Escape character
用    處
編程使用
又    稱
數據傳送換碼字符(通信控制用)
符    號
"\"

轉義字符定義

轉義字符是很多程序語言數據格式通信協議的形式文法的一部分。對於一個給定的字母表,一個轉義字符的目的是開始一個字符序列,使得轉義字符開頭的該字符序列具有不同於該字符序列單獨出現時的語義。因此轉義字符開頭的字符序列被叫做轉義序列
轉義序列通常有兩種功能。第一個是編碼一個句法上的實體,如設備命令或者無法被字母表直接表示的特殊數據。第二種功能,也叫字符引用,用於表示無法在當前上下文中被鍵盤錄入的字符(如字符串中的回車符),或者在當前上下文中會有不期望的含義的字符(如C語言字符串中的雙引號字符",不能直接出現,必須用轉義序列表示)。在後面那種情況,轉義序列是一種由轉義字符自身和一個被引用的字符組成的一個二合字母(digraph)情形。 [2] 

轉義字符控制字符

轉義字符不屬於控制字符;控制字符也不屬於轉義字符。如果控制字符的定義是非圖形的字符,或者對輸出設備(打印機、文本終端)有特殊意義的字符,那麼針對這些設備的轉義字符也是控制字符。但是程序設計用的轉義字符是圖形字符,因此它們不是控制字符。相反地,大多數ASCII控制字符單獨都具有控制功能,因此它們不是轉義字符。 [3] 

轉義字符字符表

所有的轉義字符和所對應的意義:
轉義字符
意義
ASCII碼值(十進制)
\a
響鈴(BEL)
007
\b
退格(BS) ,將當前位置移到前一列
008
\f
換頁(FF),將當前位置移到下頁開頭
012
\n
換行(LF) ,將當前位置移到下一行開頭
010
\r
回車(CR) ,將當前位置移到本行開頭
013
\t
水平製表(HT) (跳到下一個TAB位置)
009
\v
垂直製表(VT)
011
\\
代表一個反斜線字符"\"
092
\'
代表一個單引號(撇號)字符
039
\"
代表一個雙引號字符
034
\?
代表一個問號
063
\0
空字符(NUL)
000
\ddd
1到3位八進制數所代表的任意字符
三位八進制
\xhh
十六進制所代表的任意字符
十六進制
注意:
1. 區分,斜槓:"/" 與 反斜槓:"\" ,此處不可互換
2. \xhh 十六進制轉義不限制字符個數 '\x000000000000F' == '\xF' [3] 

轉義字符字符型常量

C語言中字符型常量所表示的值是int型所能包含的值。我們可以用ASCII表達式來表示一個字符型常量,或者用單引號內加反斜槓表示轉義字符。
'A', '\x2f', '\013';
其中:\x表示後面的字符是十六進制數,\0表示後面的字符是八進制數。例如十進制的17用十六進制表示就是
‘\x11’,用八進制表示就是‘\021’;
上面我們見到的\x,\n,\a等等都是叫轉義字符,它告訴編譯器需要用特殊的方式進行處理。 [1] 

轉義字符組成

轉義字符串(Escape String),即字符實體Character Entity)分成三部分:第一部分是一個&符號,英文叫ampersand;第二部分是實體(Entity)名字或者是#加上實體(Entity)編號;第三部分是一個分號。
比如,要顯示小於號(<),就可以寫 &lt; 或者 < 。
用實體(Entity)名字的好處是比較好理解,一看lt,大概就猜出是less than的意思,但是其劣勢在於並不是所有的瀏覽器都支持最新的Entity名字。而實體(Entity)編號,各種瀏覽器都能處理。
提示:實體名稱(Entity)是區分大小寫的。
備註:同一個符號,可以用“實體名稱”和“實體編號”兩種方式引用,“實體名稱”的優勢在於便於記憶,但不能保證所有的瀏覽器都能順利識別它,而“實體編號”則沒有這種擔憂,但它實在不方便記憶。 [1] 

轉義字符編程語言

如HTML轉義符、java 轉義符、xml 轉義符、 oracle 轉義符、sql 轉義符 、sqlserver 轉義符、php 轉義符、asp 轉義符、vb轉義符、 javascript 轉義符等等,還有網址中的百分號
例如,HTML的&lt; &gt;&&quot;&copy;分別是<,>,&,",©;的轉義字符
XML只有5個轉義符: &lt; &gt;& &quot; &apos;

轉義字符作用

轉義字符串(Escape Sequence)也稱字符實體(Character Entity)。在HTML中,定義轉義字符串的原因有兩個:第一個原因是像“<”和“>”這類符號已經用來表示HTML標籤,因此就不能直接當做文本中的符號來使用。為了在HTML文檔中使用這些符號,就需要定義它的轉義字符串。當解釋程序遇到這類字符串時就把它解釋為真實的字符。在輸入轉義字符串時,要嚴格遵守字母大小寫的規則。第二個原因是,有些字符在ASCII字符集中沒有定義,因此需要使用轉義字符串來表示。
其實所有編程語言,擁有轉義字符的原因基本上是兩點:一、使用轉義字符來表示字符集中定義的字符,比如ASCll裏面的控制字符及回車換行等字符,這些字符都沒有現成的文字代號。所以只能用轉義字符來表示 。二、某一些特定的字符在編輯語言中被定義為特殊用途的字符。這些字符由於被定義為特殊用途,它們失去了原有的意義。比如説Html中,<被HTML定義為標籤的開始,所以當我們轉入<時,HTML就會把它當作為開始,而不是當作一個<來看待。再如PHP 的雙引號("),被PHP定義為字符串的外圍標籤,所以如果你在一對雙引號裏面,還想要使用雙引號,只能使用轉義字符了。不然PHP就會報錯了。
從上面也可以看出轉義無非是兩種情況:1:將普通字符轉為特殊用途,一般是編程語言中,用於表示不能直接顯示的字符,比如後退鍵,回車鍵,等。2:用來將特殊意義的字符轉換回它原來的意義。一般用在正則表達式中。還有有些腳本語言是弱類型,有些語言比如html 並不是編程語言,而是標記語言,有些語言只有一種類型 比如shell 腳本語言,這些語言中字符串都不加引號” ” ,或者可以不加引號“ ”,所以有時候需要轉義字符説明某字符此時的身份是普通字符,而不是有特殊意義的元字符。
另外出於網站的安全。在數據寫入數據庫前,都會使用轉義字符(函數)對一些敏感字符進行轉義。這樣做可以避免一些別有用心的人利用特殊符號的注入攻擊。 [1]  [3] 

轉義字符顯示空格

通常情況下,HTML會自動截去多餘的空格。不管你加多少空格,都被看做一個空格。比如你在兩個字之間加了10個空格,HTML會截去9個空格,只保留一個。為了在網頁中增加空格,你可以使用 &nbsp; 表示空格。

轉義字符url

web 開發中通過英文問號(?)方式在瀏覽器地址欄中傳值時。瀏覽器是通過“&”來區分問號後的參數個數的。 如果出現傳值參數中帶有“&”時,在接受頁面就會出現錯誤,類似如下請求路徑:/next.jsp?param1=hendhs89&furej & param2=sss
參數param1中含有轉義字符“&” ,這樣會導致被請求頁的參數接收錯誤。
在傳值前 通過 java.net.URLEncoder.encode(param1) 編碼處理後,可將轉義字符轉為16進制;
特殊字符
URL中用途
轉義方式
+
表示空格
%2B
(空格)
應換用加號 + 或%20 表示
%20
/
分隔目錄和子目錄
%2F
?
分隔實際的 URL 和參數
%3F
%
指定特殊字符
%25
#
表示書籤
%23
&
URL中指定的參數間的分隔符
%26
=
URL中指定參數的值
%3D
!
URL中指定參數的值
%21
參考資料
  • 1.    譚浩強 .C程序設計(第4版): 清華大學出版社 ,2010.6
  • 2.    索明何,邢海霞,方偉駿 . C語言程序設計: 機械工業出版社,2016.2
  • 3.    尹寶林 .C程序設計導引 :機械工業出版社,2013.5