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文档进行字符实体替换

©著作权归作者所有:来自51CTO博客作者mybabe0312的原创作品,如需转载,请注明出处,否则将追究法律责任

好知识,才能预见未来

赞赏

0人进行了赞赏支持

更多相关文章

  1. 3-27(string)
  2. linux if 判断
  3. js:事件、留言板、常用字符串函数
  4. 网易伏羲关于去ID信息的表情编码研究 | 论文解读
  5. 全基因组分析揭示长非编码RNA的差异表观特征模式
  6. java Date日期类型与字符串 转换
  7. Python高能小技巧:了解bytes与str的区别
  8. Python之字符编码
  9. 在vscode中go编码发生的问题整理

随机推荐

  1. 学习PHP-cli 模式在终端输出彩色标记文字
  2. 一起看看PHP设计模式之适配器模式
  3. 了解PHP yield的高级用法
  4. Go与PHP的语法是如何对比
  5. php 异常处理有什么用?
  6. 分享一个PHP写的命令行音乐搜索下载器
  7. 关于PHP进程防止内存溢出的排查
  8. php模拟qq登录代码
  9. php base64如何进行URL字符串编码和解码?
  10. PHP实现长轮询【代码示例】