转义字符是什么

小白 2020-04-13 16:11:13
QA

所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加\来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。

所有的 ASCII 码都可以用“\”加数字(一般是 8 进制数字)来表示。而 C 中定义了一些字母前加"\"来表示常见的那些不能显示的 ASCII 字符,如\0,\t,\n 等,就称为转义字符,因为后面的字符,都不是它本来的 ASCII 字符意思了。

转义字符是什么

定义

转义字符是很多程序语言、数据格式和通信协议的形式文法的一部分。对于一个给定的字母表,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义。因此转义字符开头的字符序列被叫做转义序列。  转义序列通常有两种功能。第一个是编码一个句法上的实体,如设备命令或者无法被字母表直接表示的特殊数据。第二种功能,也叫字符引用,用于表示无法在当前上下文中被键盘录入的字符(如字符串中的回车符),或者在当前上下文中会有不期望的含义的字符(如 C 语言字符串中的双引号字符",不能直接出现,必须用转义序列表示)。在后面那种情况,转义序列是一种由转义字符自身和一个被引用的字符组成的一个二合字母(digraph)情形。

控制字符

转义字符不属于控制字符;控制字符也不属于转义字符。如果控制字符的定义是非图形的字符,或者对输出设备(打印机、文本终端)有特殊意义的字符,那么针对这些设备的转义字符也是控制字符。但是程序设计用的转义字符是图形字符,因此它们不是控制字符。相反地,大多数 ASCII 控制字符单独都具有控制功能,因此它们不是转义字符。

字符表

所有的转义字符和所对应的意义:

转义字符

意义

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'

字符型常量

C 语言中字符型常量所表示的值是 int 型所能包含的值。我们可以用 ASCII 表达式来表示一个字符型常量,或者用单引号内加反斜杠表示转义字符。

'A', '\x2f', '\013';

其中:\x 表示后面的字符是十六进制数,\0 表示后面的字符是八进制数。例如十进制的 17 用十六进制表示就是

‘\x11’,用八进制表示就是‘\021’;

上面我们见到的\x,\n,\a 等等都是叫转义字符,它告诉编译器需要用特殊的方式进行处理。

组成

转义字符串(Escape String),即字符实体(Character Entity)分成三部分:第一部分是一个&符号,英文叫 ampersand;第二部分是实体(Entity)名字或者是#加上实体(Entity)编号;第三部分是一个分号。

比如,要显示小于号(<),就可以写 &lt; 或者 < 。

用实体(Entity)名字的好处是比较好理解,一看 lt,大概就猜出是 less than 的意思,但是其劣势在于并不是所有的浏览器都支持最新的 Entity 名字。而实体(Entity)编号,各种浏览器都能处理。

提示:实体名称(Entity)是区分大小写的。

备注:同一个符号,可以用“实体名称”和“实体编号”两种方式引用,“实体名称”的优势在于便于记忆,但不能保证所有的浏览器都能顺利识别它,而“实体编号”则没有这种担忧,但它实在不方便记忆。

编程语言

如 HTML 转义符、java 转义符、xml 转义符、 oracle 转义符、sql 转义符 、sqlserver 转义符、php 转义符、asp 转义符、vb 转义符、 javascript 转义符等等,还有网址中的百分号。

例如,HTML 的&lt; &gt;&amp;&quot;&copy;分别是<,>,&,",©;的转义字符

XML 只有 5 个转义符: &lt; &gt;&amp; &quot; &apos;

作用

转义字符串(Escape Sequence)也称字符实体(Character Entity)。在 HTML 中,定义转义字符串的原因有两个:第一个原因是像“<”和“>”这类符号已经用来表示 HTML 标签,因此就不能直接当做文本中的符号来使用。为了在 HTML 文档中使用这些符号,就需要定义它的转义字符串。当解释程序遇到这类字符串时就把它解释为真实的字符。在输入转义字符串时,要严格遵守字母大小写的规则。第二个原因是,有些字符在 ASCII 字符集中没有定义,因此需要使用转义字符串来表示。

其实所有编程语言,拥有转义字符的原因基本上是两点:一、使用转义字符来表示字符集中定义的字符,比如 ASCll 里面的控制字符及回车换行等字符,这些字符都没有现成的文字代号。所以只能用转义字符来表示 。二、某一些特定的字符在编辑语言中被定义为特殊用途的字符。这些字符由于被定义为特殊用途,它们失去了原有的意义。比如说 Html 中,<被 HTML 定义为标签的开始,所以当我们转入<时,HTML 就会把它当作为开始,而不是当作一个<来看待。再如 PHP 的双引号("),被 PHP 定义为字符串的外围标签,所以如果你在一对双引号里面,还想要使用双引号,只能使用转义字符了。不然 PHP 就会报错了。

从上面也可以看出转义无非是两种情况:1:将普通字符转为特殊用途,一般是编程语言中,用于表示不能直接显示的字符,比如后退键,回车键,等。2:用来将特殊意义的字符转换回它原来的意义。一般用在正则表达式中。还有有些脚本语言是弱类型,有些语言比如 html 并不是编程语言,而是标记语言,有些语言只有一种类型 比如 shell 脚本语言,这些语言中字符串都不加引号” ” ,或者可以不加引号“ ”,所以有时候需要转义字符说明某字符此时的身份是普通字符,而不是有特殊意义的元字符。

另外出于网站的安全。在数据写入数据库前,都会使用转义字符(函数)对一些敏感字符进行转义。这样做可以避免一些别有用心的人利用特殊符号的注入攻击。

0个人收藏 收藏

评论交流

泪雪默认头像 请「登录」后参与评论
  1. 加载中..

相关推荐

  • YAML 文件 YAML file

    如何打开和编辑YAML文件

    打开YAML文件可以使用任何文本编辑器打开,如Notepad++、Sublime Text、VS Code等;编辑YAML文件可直接在文本编辑器中修改,但需要注意其语法规则,对空格和缩进非常敏感,冒号后面必须跟一个空格,字符串可不加引号。
  • URL 文件 URL file

    URL是什么格式文件

    URL全称为Uniform Resource Locator,是一种用于标识互联网上资源位置的统一资源定位符,URL通常采用文本文件的形式保存,其格式是一个包含了资源的地址、协议、域名等信息的文本字符串。
  • WAF

    WAF可以防御哪些攻击

    Web 应用防火墙可以防止 Web 应用免受各种常见攻击,比如 SQL 注入,跨站脚本漏洞(XSS)等。WAF 也能够监测并过滤掉某些可能让应用遭受 DOS(拒绝服务)攻击的流量。WAF 会在 HTTP 流量抵达应用服务器之前检测可疑访问。
  • ASCI 码 ASCII code

    ASCII码是几进制数

    ASCII码是二进制数,ASCII码值是使用指定的7位或8位二进制数组合来表示128或256种可能的字符,ASCII码表,它的全称是美国信息交换标准代码,为保证人类和设备,设备和计算机之间能进行正确的信息交换,人们编制的统一的信息交换代码。
  • ASCII

    ASCII 是什么

    美国信息交换标准(ASCII)是一种基于英语中字母字符顺序编码字符的方法。ASCII整数表示具有可打印和不可打印的子集。可打印字符是普通字符,不可打印字符是用于表示键盘键的字符。
  • Domain 域名

    DNS如何支持多语言域名

    DNS的多语言支持通过国际化域名(IDN)和国际化顶级域名(IDN TLDs)实现,允许非拉丁字符在域名中使用。Unicode字符编码和ASCII兼容性是关键,同时引入语言标签以确保域名在不同语言环境下一致。然而,安全问题需要处理,包括混淆攻击和域名相似性的风险。