ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

URL百分比编码与符号字符

2021-03-28 16:01:10  阅读:228  来源: 互联网

标签:编码 百分比 HTML &# 字符 URL html


1,百分比编码(Percent-encoding)

百分比编码 是一种拥有8位字符编码的编码机制,这些编码在URL的上下文中具有特定的含义。它有时被称为URL编码。编码由英文字母替换组成:“%” 后跟替换字符的ASCII的十六进制表示。

需要编码的场见特殊字符有:

特殊字符 百分比编码
: %3A
/ %2F
? %3F
@ %40
$ %24
& %26
= %3D
% %25

更多可参考:https://developer.mozilla.org/zh-CN/docs/Glossary/percent-encoding

2,字符实体(character entities)

如果希望正确地显示HTML中的预留字符,我们必须在 HTML 源代码中使用字符实进行替换。HTML 中有用的字符实体:

显示结果 描述 实体名称 实体编号
空格    
< 小于号 &lt; &#60;
> 大于号 &gt; &#62;
& 和号 &amp; &#38;
" 引号 &quot; &#34;
' 撇号 &apos; (IE不支持) &#39;
¥ 元(yen) &yen; &#165;
© 版权(copyright) &copy; &#169;
® 注册商标 &reg; &#174;
商标 &trade; &#8482;
× 乘号 &times; &#215;
÷ 除号 &divide; &#247;

更多可参考:https://www.w3school.com.cn/tags/html_ref_entities.html

3,URL中出现字符实体的情况

由上面列出的字符可知,其实有很多特殊字符既有百分比编码,也有对应的字符实体,那么我们来考虑以下的场景。

在HTML源文档中存在一个URL链接,该URL中又存在"&"字符,那么如何能正确地编码"&"字符为%26或& 呢?

  • 如果该URL链接只是为了在页面中呈现,那么把它当做纯粹的HTML中的内容即可,如此一来就应该对链接内容按照实体字符规则替换;
  • 如果该URL连接放在<a>标签中进行跳转,那么为了确保能正确的对URL地址进行解析,则需要对其内容按照百分比编码格式进行编码;

例如,如果我们使用以下代码对html文件进行处理:

String htmlContext = "<body>http://localhost/path?age=123&name=ddd</body>" ;
String html = org.apache.commons.lang.StringEscapeUtils.escapeHtml(htmlContext) ;

那么最终输出的html内容为

&lt;body&gt;http://localhost/path?age=123&amp;name=ddd&lt;/body&gt;

可见,其url中的"&"字符被“&amp;”所替换,可这很可能不是我们想要的。我们希望的应该是对"&"进行百分比编码变成"%26"

如果我们使用

String html = java.net.URLEncoder.encode(htmlContext,"UTF-8")

那么最终输出的html内容为

%3Cbody%3Ehttp%3A%2F%2Flocalhost%2Fpath%3Fage%3D123%26name%3Dddd%3C%2Fbody%3E

当然,正确的做法应该是将超链接的URL使用百分比编码后插入HTML文档中,然后再对HTML文档进行字符实体替换

标签:编码,百分比,HTML,&#,字符,URL,html
来源: https://blog.51cto.com/dengshuangfu/2675342

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有