js_UrlEncoding.txt

https://www.cnblogs.com/shihaiying/p/11759202.html

一、RFC3986文档规定:
    Url中只允许包含
    英文字母(a-zA-Z)、
    数字(0-9)、
    4个特殊字符:-_.~、
    以及所有保留字符(18个),即:!*'();:@&=+$,/?#[]。


二、保留字符
    保留字符 18个,即:!*'();:@&=+$,/?#[]。
    保留字符是 url 中有特定含义的字符,如:
        ://用于分隔协议和主机,
        /用于分隔主机和路径,
        ?用于分隔路径和查询参数,
        =用于表示查询参数中的键值对,
        &用于分隔查询多个键值对等等。
    注意:
        1.对于Url中的合法(允许包含的)字符,编码和不编码是等价的。
        2.合法字符中的保留字符,RFC3986文档给规定了特定的含义,
            如果出现,但不代表此含义时,需要编码!


三、需要编码的字符。
    1.保留字符(需要编码的情况:如果在 url 中要出现保留字符,但其含义与保留字符规定的含义不同。)
    2.不安全字符(空格、引号以及<>、#、%、{}|\^[]`~)。
    3.其他字符(所有 url 允许包含之外的字符,比如:汉字等等)


四、Url编码。
    通常也被称为百分号编码(Url Encoding,also known as percent-encoding),
    是因为它的编码方式非常简单,使用%百分号加上两位的字符“0123456789ABCDEF”代表一个字节的十六进制形式。

    Url编码默认使用的字符集是 US-ASCII。
    例如,a 在US-ASCII码中对应的字节是0x61,那么Url编码之后得到的就是%61,
    我们在地址栏上输入http://g.cn/search?q=%61%62%63,实际上就等同于在google上搜索abc了。

    又如@符号 在ASCII字符集中对应的字节为0x40,经过Url编码之后得到的是%40。
    注:
        1)对于非ASCII字符,需要使用ASCII字符集的超集进行编码得到相应的字节(编号对应该字符),
            然后对每个字节执行百分号编码。
            如:一个汉字,需要三个字节来表示,如:你 -> %E4%BD%A0
        2)如果某个字节对应着ASCII字符集中的某个非保留字符,则此字节无需使用百分号表示。


五、保留字符的 url 编码列表(18个),即:!*'();:@&=+$,/?#[]。:
    ! -> %21  # -> %23  $ -> %24  & -> %26  ' -> %27  ( -> %28  ) -> %29
    * -> %2A  + -> %2B  , -> %2C  / -> %2F
    : -> %3A  ; -> %3B  = -> %3D  ? -> %3F
    @ -> %40
    [ -> %5B  ] -> %5D


六、其他常用字符:
    " -> %22  % -> %25  | -> %7C
    { -> %7B  } -> %7D
    %0D%0A -> 回车、换行
    英文空格 -> %20/+


七、在 js 中,可以使用函数进行转换。
1、encodeURI()
2、decodeURI()
3、encodeURIComponent()
    如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent() 方法分别对各组件进行编码。
4、decodeURIComponent()


八、在 get 请求的查询字符串里,
有的字符可以使用源码,也可以使用编码过的字符。
以下三行代码在查询字符串里等效,如:
%E6%88%BF%E5%B1%8B%E7%BC%96%3D
%E6%88%BF%E5%B1%8B%E7%BC%96=
房屋编=

代码摘录:
// 房屋编: "120103000001714"
let buildingNum_f = feature.attributes.房屋编; // 房屋从属的建筑编号。
// console.log("buildingNum_f:", buildingNum_f);

// let dataStr = '?where=%E6%88%BF%E5%B1%8B%E7%BC%96=%27' + Number(buildingNum_f) + '%27' +
//   '&text=&objectIds=&time=&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&distance=&units=esriSRUnit_Foot&relationParam=' +
//   '&outFields=户室,标准_1&returnGeometry=false&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=&havingClause=&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&historicMoment=&returnDistinctValues=true&resultOffset=&resultRecordCount=&returnExtentOnly=false&datumTransformation=&parameterValues=&rangeValues=&quantizationParameters=&featureEncoding=esriDefault&f=pjson';

let dataStr = '?where=房屋编=%27' + Number(buildingNum_f) + '%27' +
'&text=&objectIds=&time=&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&distance=&units=esriSRUnit_Foot&relationParam=' +
'&outFields=户室,标准_1&returnGeometry=false&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=&havingClause=&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&historicMoment=&returnDistinctValues=true&resultOffset=&resultRecordCount=&returnExtentOnly=false&datumTransformation=&parameterValues=&rangeValues=&quantizationParameters=&featureEncoding=esriDefault&f=pjson';

let self = this;
this.familyNum = 0;
axios
.get(QConfig_house.queryUrl_address + dataStr)
.then(response => {







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值