zoukankan      html  css  js  c++  java
  • JS URI Encode

    javascript中存在几种对URL字符串进行编码的方法:escape/encodeURI/encodeURIComponent。这几种编码所起的作用各不相同。

    escape

    • 采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符 在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。

    • 不会被此方法编码的字符: @ * / +

    encodeURI VS encodeURIComponent 方法

    背景

    encodeURI 和 encodeURIComponent都是ECMA-262标准中定义的函数,兼容这个标准的语言(如JavaScript, ActionScript)都会实现这两个函数。

    它们用来对URI (RFC-2396)字符串进行编码的全局函数,但是它们的处理方式和使用场景有所不同. RFC-2396中对于 URI中的字符分类

    • 保留字符(reserved characters):这类字符是URI中的保留关键字符,它们用于分割URI中的各个部分。这些字符是:”;“ | ”/“ | ”?“ | ”:“ | ”@“ | ”&“ | ”=“ | ”+“ | ”$“ | ”,”
    • Mark字符(mark characters):这类字符在RFC-2396中特别定义,但是没有特别说明用途,可能是和别的RFC标准相关。 这些字符是:”–“ | ”_“ | ”.“ | ”!“ | ”~“ | ”*“ | ”‘“ | ”(“ | ”)”
    • 基本字符(alphanum characters):这类字符是URI中的主体部分,它包括所有的大写字母、小写字母和数字

    encodeURI

    encodeURI: 该函数对传入字符串中的所有非(基本字符、Mark字符和保留字符)进行转义编码(escaping)。所有的需要转义的字符都按照UTF-8编码转化成为一个、两个或者三个字节的十六进制转义字符(%xx)

    encodeURIComponent

    该函数处理方式和encodeURI只有一个不同点,那就是对于保留字符同样做转义编码

    NodeJS 中http模块获取参数时会自动通过decodeURIComponent进行解码

    function (paramName) {
        if (req.method === "GET") {
            return decodeURIComponent(req.query[paramName]);
        } else if (req.method === "POST") {
            if (typeof req.body === "object") {
                return decodeURIComponent(req.body[paramName]);
            } else {
                return decodeURIComponent(JSON.stringify(req.body)[paramName]);
            }
        }
    }

    编码导致的页面乱码

    对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent。

    另外,encodeURI/encodeURIComponent是在javascript1.5之后引进的,escape则在 javascript1.0版本就有。

  • 相关阅读:
    NumPy笔记:运算符(exp,sqrt,square)
    NumPy笔记:常用操作
    php字符操作
    laravel如何实现批量插入
    php中@符号的作用
    laravel如何实现数据的批量插入
    如何在laravel框架中使用阿里云的oss
    laravle如何设置mysql数据表前缀
    thinkphp视图中如何调用并且向控制器传参数
    thinkphp如何隐藏入口文件index.php
  • 原文地址:https://www.cnblogs.com/mininice/p/3876300.html
Copyright © 2011-2022 走看看