您现在的位置是:首页 > 正文

HTML实体编码、URL编码、正则表达式、状态码总结

2024-01-30 20:13:32阅读 4

HTML–实体编码

众所周知,人类所使用的文字是不能直接和计算机进行互通的,需要通过编码才能转换为计算机能够识别的内容,而网页中包含了大量的文字,浏览器要想读懂这些文字,就必须要先知道它们的编码方法。由此,服务器在向浏览器发送HTML文件时,会通过HTTP头信息,声明网页的编码方式。

Content-type:text/html;charset=UTF-8

上述HTTP头文件代码就声明了服务器发送的数据类型时text/html(即HTML网页),然后声明网页的文字编码时UTF-8。

其次在网页内部也会再用标签声明网页的编码

<meta charset="UST-8"

虽然HTML用的时UTF-8的编码方式,但是由于Unicode中的字符集实在是太多了,包括了很多HTML语言里没有对应的字面形式的以及THML中的保留字符等,所以HTML还制定了一套实体编码(entity encoding)的简单编码策略。

即:

  • HTML实体编码格式全部为以&开头 以;结尾
  • 与ASCII编码对照将字符转化为对应的十进制或十六进制
  • Unicode字符编码,格式: 以符号&#开头,分号;结尾

例:

 &lt;p style=&quot;color: red;&quot; &gt;&#104;&#101;&#108;&#108;&#111;&#0033; &lt;/p &gt;

在浏览器中打印的结果:

<p style="color: red;" >hello! </p >

**注:**HTML实体编码不能用于JavaScript

状态码

HTTP[状态码](HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。

状态码 类别 原因
1xx Informational(信息性状态码) 接受的请求正在处理
2xx Success(成功状态码) 请求正常处理完毕
3xx Redirection(重定向状态码) 需要进行附加操作已完成请求
4xx Client Error(客户端错误状态码) 客户端无法处理请求
5xx Server Error(服务器错误状态码) 服务器处理请求错误
状态码 状态 相应含义
200 成功 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页
201 已创建 请求成功并且服务器创建了新的资源
202 已接受 服务器以接受请求,但尚未处理
203 非授权信息 服务器已成功处理了请求,但返回的信息可能来自另一来源
204 无内容 服务器成功处理了请求,但没有返回任何内容
205 重置内容 服务器成功处理了请求,但没有返回任何内容
206 部分内容 服务器成功处理了部分GET请求
300 多种选择 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择
301 永久移动 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置
302 重定向 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
303 查看其他位置 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码
304 未修改(请求缓存) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容
305 使用代理 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理
307 临时重定向 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
400 错误请求 服务器不理解请求的语法
401 未授权 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应
403 禁止 服务器拒绝请求
404 未找到 服务器找不到请求的网页
405 方法禁用 禁用请求中指定的方法
406 不接受 无法使用请求的内容特性响应请求的网页
407 需要代理授权 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理
408 请求超时 服务器等候请求时发生超时
409 冲突 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息
410 已删除 如果请求的资源已永久删除,服务器就会返回此响应
411 需要有效长度 服务器不接受不含有效内容长度标头字段的请求
412 未满足前提条件 服务器未满足请求者在请求中设置的其中一个前提条件
413 请求实体过大 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力
414 请求的 URI 过长 求的 URI(通常为网址)过长,服务器无法处理
415 不支持的媒体类型 请求的格式不受请求页面的支持
416 请求范围不符合要求 如果页面无法提供请求的范围,则服务器会返回此状态代码
417 未满足期望值 服务器未满足"期望"请求标头字段的要求
500 服务器内部错误 服务器遇到错误,无法完成请求
501 尚未实施 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码
502 错误网关 服务器作为网关或代理,从上游服务器收到无效响应
503 服务不可用 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态
504 网关超时 服务器作为网关或代理,但是没有及时从上游服务器收到请求
505 HTTP 版本不受支持 服务器不支持请求中所用的 HTTP 协议版本

重点

方法 缓存(永久重定向) 不缓存(临时重定向)
转GET 301 302、303
方法保持 308 307

URL编码

什么是URL编码

编码是指将数字和字符通过一定的转换后使其能够在计算机中进行展示的行为,因为计算机只能识别0,1的信号,所以输入计算机中的信息都要转换成0,1串的形式才能被计算机识别。在计算机中,编码的本质是用来保存或者传输信息,但是由于二进制编码太繁琐,所以人们在处理编码的时候通常用十进制或者十六进制表示,如我们所熟知的ASCII码就是用十进制表示字符。

URL编码是浏览器通用的一种编码形式,早期的URL编码是将scope限定在URL中,对URL中的一些字符进行编码。实际应用中,HTTP的body以及header等其他部分都有URL编码的使用。当URL路径或者查询参数中带有中文或者页数字符的时候,就需要对URL进行编码(十六进制编码)。URL的原则是使用安全字符去表示那些不安全字符。

安全字符是指没有特殊用途或者特殊意义的字符。

URL的编码方式

  • 组成部分URL是有一些简单的组件构成,比如协议、域名、端口号、路径、查询以及字符串等,如

    http://www.ccc.net/index?param=10
    
    • **协议(scheme)**是浏览器请求服务器资源的方法,上述http://表示使用的是http协议。在浏览器支持的多种协议中,默认http协议,也就是说如果在浏览器地址栏输入网址时没有输入协议,而是直接输入www.ccc.net,浏览器的访问结果就是http://www.ccc.net

      在当今应用中http大多数时候被认为是不安全的,所以越来越多的网站开始使 用http的加密版----https协议

    • **主机(host)**是资源所在网站名或服务器的名字,又称为域名。

      上述www.ccc.net就是主机,有些主机没有域名只有ip地址,在这里还涉及到DNS域名解析器的工作原理,上述内容已经写了较为详细的过程了。

    • 端口:同一个域名下可能包含多个网站,他们之间通过端口(port)区分。可以理解为,访问者告诉服务器想要访问哪一个端口。HTTP协议的默认端口是80,如果省略了这个参数,服务器就会返回80端口的网站。

    • **路径(path)**是资源在网站的位置。上述/index表示的就是路径。早期的路径指的是真实的物理地址,现在服务器可以模拟这些地址,所以现在的路径指的是虚拟地址。路径可以只包含目录,不包含文件名。

    • **查询参数(parameter)**是提供给服务器的额外信息。查询参数可以有一组或者多组。没对参数都是键值对(key-value pair)的形式,同时具有键名(key)和键值(value),它们之间使用=链接。

    • 锚点(anchor)是网页内部的定位点,使用#加上锚点名称,放在网址的最后,比如#anchor。浏览器加载页面以后,会自动滚动到锚点所在的位置。

  • 保留字符:URL中规定了一些具有特殊意义的字符,常被用来分割两个不同的URL组件,这些字符被称为保留字符。

    • **😗*用于分割协议和主机组件;
    • **/**用于分割主机和路径;
    • **?**用于分割路径和查询参数等;
    • **=**用于表示查询参数中的键值对;
    • **&**用于分隔查询多个键值对
    • 其余保留字符**. … # @ $ + ; %**
  • 字符转义:URL的字符转义方法是在这些字符的十六进制ASCII码钱加(%

    • !:21%
    • #:23%
    • $:24%
    • &:26%
    • ':27%
    • (:%28
    • ):%29
    • *:%2A
    • +:%2B
    • ,:%2C
    • /:%2F
    • ::%3A
    • ;:%3B
    • =:%3D
    • ?:%3F
    • @:%40
    • [:%5B
    • ]:%5D

URL分为绝对URL和相对URL两种

  • 绝对URL:只靠URL本身就能确定组员的位置。这意味着,URL必须带有资源的完整信息,包含协议、主机、路径等部分。
  • 相对URL:URL不包含资源位置的全部信息,必须结合当前网页的位置,才能定位资源。(可以参照文件目录的相对路径)

URL还有两种特殊的简写方式:

  • .:表示当前目录,比如./a.html,表示当前目录下的a.html文件
  • ..:表示上级目录,比如../a.html(上级目录下的a.html文件)
  • 引申用法:../../表示上两级目录

正则表达式

正则表达式测试网站:https://regexr-cn.com/
练习网站:https://codejiaonang.com/

基础

  • []:表示匹配括号内的内容
    • [abc]:表示匹配含a,b,c的字符
    • [a-z]:区间匹配,表示匹配含小写字母a到z的所有字符
    • 特殊字符匹配:如匹配[],则需要在[]前加上\转义符[\[]]
    • [^0-9]:匹配非数字0-9的字符
  • 快捷匹配
    • \d:匹配所有的数字
    • \w:匹配所有的字母
    • \s:匹配空白,如tab,空格,换行之类的空白字符
    • \b:匹配单词的边界,如\bbody\b则表示匹配body单词,不受其前后字符的影响。
  • 快捷匹配取反
    • \D:匹配所有的非数字字符
    • \W:匹配所有的非字母字符
    • \S:匹配所有非空白字符
    • \B:匹配非单词边界
  • ^:用在匹配对象的前面,表示匹配开头,如^python表示匹配以python开头的数据
  • ** ∗ ∗ :用在匹配对象的后面,表示匹配结尾,如 ‘ p y t h o n **:用在匹配对象的后面,表示匹配结尾,如`python :用在匹配对象的后面,表示匹配结尾,如python`表示匹配以python结尾的数据
  • .:匹配任意字符,换行符\n除外
  • ?:匹配可选字符,可以出现0次或者多次,如yours?,则可以匹配your、yours等
  • {}:匹配重复
    • \d{9}:匹配出现了9次数字的字符串
    • \d{7,9}:区间匹配,表示匹配数字出现了7到9次的数字
    • \d{7,9}?:加一个?表示非贪婪模式正则匹配,当匹配到7个数字之后就不再继续向后匹配,如12346789的匹配结果为1234567
    • \d{7,}:匹配7位或7位以上的数字
    • +:等于{1,}
    • *****:等于{0,}

进阶

分组

​ 在正则表达式中提供了一种将表达式分组的机制,当使用分组时,除了获得整个匹配,还能够在匹配中选择每一个分组。

用法:用()将条件括起来就可以了,如匹配电话号码0731-8881231的正则表达式为(\d{4})-(\d{7})

  • 或者条件:使用分组的同时还可以使用或者(or)条件。如(.jpg|.png|.gif)表示提取含.jpg或者.png或者.gif的内容

  • 非捕获分组:有时候我们并不需要某个分组的内容,但是又想使用分组的特性。这个时候就可以使用非捕获分组(?:表达式),从而不捕获数据,还能使用分组的功能。

    如从以下数据中提取电话号码的正则表达式为

    (?:\d{2}|\d{3}|tel)[\-:](\d{11})

    01-13615874615
    012-15896354876
    tel:15964852164
  • 分组的回溯引用:正则表达式中海提供了一种引用之前匹配分组的机制,有些时候,我们或许会寻找到一个匹配,该匹配接下来会再次出现。

    如我们需要匹配font标签中的"提示"字段

    <font>提示</font>
    

    正则表达式可以写为<\w+>(.*?)</\w+>

    但是如果这样匹配的话如果出现以下字段也能匹配成功,但是此时的font标签已经错了。这种情况我们就可以用到回溯引用了

    <font>提示</body>
    

    写法:<(\w+)>(.*?)</\1>其中1表示第一个分组内的内容,也就是\w+,表示的意思时内容要第一个分组内的一致,如此一来,就可以确定所匹配的内容时正确的font标签内的内容了。

断言

​ 很多人也称先行断言和后行断言为环视,也有人叫预搜索。

​ 断言一共有四种:

  • 正向先行断言:(?=表达式),指在某个位置向右看,表示所在位置右侧必须能匹配表达式

    例如:我喜欢你 我喜欢 我喜欢她 喜欢 喜欢你

    如果要取出喜欢两个字,要求这个喜欢后面有你,这个时候就要写:喜欢(?=你),这就是正向先行断言。

  • 反向先行断言:?!表达式,作用是保证不能出现某字符。

    例如:我喜欢你 我喜欢 我喜欢她 喜欢 喜欢你

    如果要取出喜欢两个字,要求这个喜欢后面没有你,这个时候就要这么写:喜欢?!你,这就是反向先行断言。

  • 正向后行断言:?<=表达式,指在某个位置向左看,表示所在位置左侧必须能匹配表达式

    例如:我喜欢你 我喜欢 我喜欢她 喜欢 喜欢你

    取出喜欢两个字,要求喜欢的前面有我,后面有你,这个时候就要写(?<=我)喜欢(?=你)。

  • 反向后行断言:?<!表达式指在某个位置向左看,表示所在位置左侧不能匹配表达式

    例如:我喜欢你 我喜欢 我喜欢她 喜欢 喜欢你

    取出喜欢两个字,要求喜欢的前面没有我,后面没有你,这个时候就写(?<!我)喜欢(?!你)

网站文章

  • 超燃!高效 MacBook 工作环境配置,超实用!

    超燃!高效 MacBook 工作环境配置,超实用!

    关注“Java后端技术全栈”回复“面试”获取最新资料回复“加群”邀您进技术交流群工欲善其事,必先利其器,工具永远都是用来解决问题的,没必要为了工具而工具,一切工具都是为了能快速准确的完成...

    2024-01-30 20:13:04
  • 做了3年Java的朋友跳槽天猫,拿下offer(面经总结)

    做了3年Java的朋友跳槽天猫,拿下offer(面经总结)

    很多人去面试之前都很做足准备,下面就分享一次,从面试中,其实可以看得出来现在的公司对于面试者的知识体系要求,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 天猫一面: 第一步先自我介绍? 介绍自己...

    2024-01-30 20:12:56
  • 网站打开速度缓慢的原因都有哪些?

    网站打开速度缓慢的原因都有哪些?

    网站打开速度缓慢的原因都有哪些?

    2024-01-30 20:12:48
  • css修改滚动条样式(兼容火狐)

    css修改滚动条样式(兼容火狐)

    css修改滚动条样式(兼容火狐)

    2024-01-30 20:12:40
  • idea调试之条件断点

    idea调试之条件断点

    开发中有时会出现这样的场景,在一个很长的for循环中,我们只想在某一次循环中(比如第50次循环,或者循环中某个值符合条件)让断点停住,进行进一步的调试分析,此时使用idea的条件断点就能很方便的解决问题。举例如下:package demo;public class ConditionalBreakPointDemo { public static void main(S...

    2024-01-30 20:12:11
  • 巨星陨落!清华大学发讣告

    巨星陨落!清华大学发讣告

    点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达点击进入—>【计算机视觉和Transformer】交流群转载自:募格学术 | 来源:清华大学、软科等。11月4日,清华大学官微发讣告:中国共产党党员、中国科学院院士、国际著名摩擦学专家、原摩擦学国家重点实验室创始人、清华大学机械工程系教授温诗铸同志,因病医治无效,于2023年11月3日在北京逝世,享年91岁。温诗铸院士193...

    2024-01-30 20:12:04
  • FPGA的一些细节(持续更新)

    FPGA的一些细节(持续更新)

    1.一个工程所在的文件夹,从开始路径到最终路径都要以英文命名,否则会编译出错;

    2024-01-30 20:11:57
  • Hadoop中HDFS目录字符长度和目录级数限制

    今天忙里抽闲,看了一点hadoop的源码,偶然间看到了HDFS的目录字符限制和目录的级数限制。远远超过我的预期,没想到设置的这么大。如下: // We need to limit the length and depth of a path in the filesystem. HADOOP-438 // Currently we set the maximum length

    2024-01-30 20:11:28
  • vtkMapper::ImmediateModeRenderingOff解决办法

    vtkMapper::ImmediateModeRenderingOff解决办法

    vtkMapper::ImmediateModeRenderingOff解决办法项目属性页 —> C/C++ —> 常规 —> SDL检查:设置为否注意:包括上面解决方案空白处右键属性页、以及下面属性管理器的属性页测试可行

    2024-01-30 20:11:21
  • 单片机输入输出接口隔离或者增加驱动能力电路

    单片机输入输出接口隔离或者增加驱动能力电路

      随着微电子技术和计算机技术的发展,原来以强电和电器为主、功能简单的电气设备发展成为强、弱电结合,具有数字化特点、功能完善的新型微电子设备。 在很多场合,已经出现了越来越多的单片机产品代替传统的电气...

    2024-01-30 20:11:13