• URL编码及解码


    为什么要对URL进行编码?

          一般来说,网页URL只能使用英文、数字、还有一些特定的字符。根据网络标准RFC 1738做了硬性规定:

    只有字母和数字[0-9a-zA-Z]、一些特殊符号"$-_.+!*'(),"[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。

          所以若URL中包括中文等字符,就必须经过编码后使用,否则传给服务器的request URL就会包含乱码,服务器无法正确识别。

          因为RFC 1738没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定,所以导致“URL编码”领域非常混乱。想要了解浏览器多种情况下的编码处理,可以参考阮一峰大神的关于URL编码

    URL的编码与解码方法

          不同的操作系统、不同的浏览器、不同的网页字符集,将导致完全不同的编码结果,为了保证客户端只用一种编码方法向服务器发出请求,可以使用Javascript先对URL编码,然后再向服务器提交,不要给浏览器插手的机会。

          编码方法有三种:

          escape(url)、encodeURL(url)、encodeURLComponent(url) (url为需要编码的URL)

    方法 规则 特点

    escape(编码)

    unescape(解码)

    除了ASCII字母、数字、标点符号"@ * _ + - . /"以外,对其他所有字符进行编码 现在已经不提倡使用这种方法了,它不能直接运用与URL编码,它的真正作用是返回一个字符的Unicode编码值

    encodeURI(编码)

    decodeURI(解码)

    除了常见的符号以外,对其他一些在网址中有特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码 encodeURI()是Javascript中真正用来对URL编码的函数,它着眼于对整个URL进行编码

    encodeURIComponent(编码)

    decodeURIComponent解码)

    在encodeURI()中不被编码的符号"; / ? : @ & = + $ , #",在encodeURIComponent()中统统会被编码 与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码

          举个栗子:

          用后两种常用编码方法对该URL:http://www.w3school.com.cn/my first:class/ 进行编码: 

    • encodeURI: encodeURI('http://www.w3school.com.cn/my first:class/') -> http://www.w3school.com.cn/my%20first:class/
    • encodeURIComponent: encodeURIComponent('http://www.w3school.com.cn/my first:class/') -> http%3A%2F%2Fwww.w3school.com.cn%2Fmy%20first%3Aclass%2F
  • 相关阅读:
    POJ训练计划1035_Spell checker(串处理/暴力)
    软考-数据库与标准化和知识产权
    分析Cocos2d-x横版ACT手游源码 1、公共
    增强版的RecycleViewAdapter,能够直接使用
    高考志愿,你们想好怎么填了吗?
    win32收不到F10按键消息解决的方法
    Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换
    九度OJ #1437 To Fill or Not to Fil
    SQL数据分组后取最大值或者取前几个值(依照某一列排序)
    3.5星|《硅谷产品》:Facebook网红社区产品经理经验谈
  • 原文地址:https://www.cnblogs.com/qiuxiaozhen/p/10567798.html
Copyright © 2020-2023  润新知