JS中URL编码参数(UrlEncode)

时间:2022-11-05 20:41:16

JS中URL编码参数(UrlEncode)

网上有很多文字作品写涉及在JS中呈现类似UrlEncode功能时都是自定义参数来呈现,其实JS中本身就有那样的参数。
参数parameter由于用类似URL的形式传过去 , 所以别直接就那样赋值
以下是对变量值的URL编码总结 : 意见用encodeURIComponent() , GET 和POST方法都能够发送过去
Java编程script中存在几种对URL字符串停止编码的窍门:escape(),encodeURI(),以及encodeURIComponent()。这几种编码所起的功能各不相同。
escape() 窍门:
采用ISO Latin字符集对指定的字符串停止编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx各式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。
不会被此窍门编码的字符: @ * / +
encodeURI() 窍门:
把URI字符串采用UTF-8编码各式转化成escape各式的字符串。
不会被此窍门编码的字符:! @ # $& * ( ) = : / ; ? + '
encodeURIComponent() 窍门:
把URI字符串采用UTF-8编码各式转化成escape各式的字符串。与encodeURI()相比,那个窍门将对更多的字符停止编码,比如 / 等字符。所以假如字符串里面包含了URI的几个部份的话,别用那个窍门来停止编码,否则 / 字符被编码之后URL将呈现错误。
不会被此窍门编码的字符:! * ( ) '

因此,对于汉文字符串来说,假如不期望把字符串编码各式转化成UTF-8各式的(比如原页面和目的页面的charset是一致的时候),只需求应用 escape。假如你的页面是GB2312或者更多有联系的编码,而接受参数parameter的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent。

用JavaScript实现UrlEncode和UrlDecode的脚本代码

<script type="text/vbscript">
Function str2asc(strstr)
str2asc = hex(asc(strstr))
End Function
Function asc2str(ascasc)
asc2str = chr(ascasc)
End Function
</script> <script type="text/javascript">
/*这里开始时UrlEncode和UrlDecode函数*/
function UrlEncode(str){
var ret="";
var strSpecial="!\"#$%&'()*+,/:;<=>?[]^`{|}~%";
var tt= ""; for(var i=0;i<str.length;i++){
var chr = str.charAt(i);
var c=str2asc(chr);
tt += chr+":"+c+"n";
if(parseInt("0x"+c) > 0x7f){
ret+="%"+c.slice(0,2)+"%"+c.slice(-2);
}else{
if(chr==" ")
ret+="+";
else if(strSpecial.indexOf(chr)!=-1)
ret+="%"+c.toString(16);
else
ret+=chr;
}
}
return ret;
}
function UrlDecode(str){
var ret="";
for(var i=0;i<str.length;i++){
var chr = str.charAt(i);
if(chr == "+"){
ret+=" ";
}else if(chr=="%"){
var asc = str.substring(i+1,i+3);
if(parseInt("0x"+asc)>0x7f){
ret+=asc2str(parseInt("0x"+asc+str.substring(i+4,i+6)));
i+=5;
}else{
ret+=asc2str(parseInt("0x"+asc));
i+=2;
}
}else{
ret+= chr;
}
}
return ret;
}
alert(UrlDecode("%C2%D2%C2%EB"));
</script> 
JavaScript 中实现 ANSI(gb2312) 的 URL 编码与解码(URLEncode、URLDecode)
 
 encodeURI 和 encodeURIComponent 是按 UTF-8 对 URL 编码的,下面的代码是按 ANSI 对 URL进行编码和解码的。使用了两个 vbscript 自定义函数,请参见 JavaScript 函数如何调用 VBScript 函数。
以下整理自 Moocky.Mark's Blog。
<script type="text/vbscript">
<!--
function str2asc(strstr)
    str2asc   =   hex(asc(strstr))
end function
 
function   asc2str(ascasc)
    asc2str   =   chr(ascasc)
end function
'-->
</script>
 
 
<script type="text/javascript">
<!--
function urlEncode(str)
{
    var ret = "";
    var strSpecial = "!\"#$%&’()*+,/:;<=>?[]^`{|}~%";
    var tt = "";
    for(var i = 0; i < str.length; i++)
    {
        var chr = str.charAt(i);
        var c = str2asc(chr);
        tt += chr + ":" + c + "n";
        if (parseInt("0x" + c) > 0x7f)
        {
            ret += "%" + c.slice(0,2) + "%" + c.slice(-2);
        }
        else
        {
            if (chr == " ")
                ret += "+";
            else if (strSpecial.indexOf(chr) != -1)
                ret += "%" + c.toString(16);
            else
                ret += chr;
        }
    }
   
    return ret;
} function urlDecode(str)
{
    var ret = "";
    for (var i = 0; i < str.length; i++)
    {
        var chr = str.charAt(i);
        if (chr == "+")
        {
            ret += " ";
        }
        else if (chr == "%")
        {
            var asc = str.substring(i+1, i+3);
            if (parseInt("0x"+asc) > 0x7f)
            {
                ret += asc2str(parseInt("0x" + asc+str.substring(i+4, i+6)));
                i += 5;
            }
            else
            {
                ret += asc2str(parseInt("0x"+asc));
                i += 2;
            }
        }
        else
        {
            ret += chr;
        }
    }
   
    return ret;
}
-->
</script>
VBScript、VB.NET 中的 URLEncode、URLDecode
 
 (本文的 URLEncode、URLDecode 是按 ANSI 编码的。千一网络编辑注)
 VBScript 中的 URLEncode、URLDecode
 
Public Function URLEncode(strURL)
Dim I
Dim tempStr
For I = 1 To Len(strURL)
    If Asc(Mid(strURL, I, 1)) < 0 Then
       tempStr = "%" & Right(CStr(Hex(Asc(Mid(strURL, I, 1)))), 2)
       tempStr = "%" & Left(CStr(Hex(Asc(Mid(strURL, I, 1)))), Len(CStr(Hex(Asc(Mid(strURL, I, 1))))) - 2) & tempStr
       URLEncode = URLEncode & tempStr
    ElseIf (Asc(Mid(strURL, I, 1)) >= 65 And Asc(Mid(strURL, I, 1)) <= 90) Or (Asc(Mid(strURL, I, 1)) >= 97 And Asc(Mid(strURL, I, 1)) <= 122) Then
       URLEncode = URLEncode & Mid(strURL, I, 1)
    Else
       URLEncode = URLEncode & "%" & Hex(Asc(Mid(strURL, I, 1)))
    End If
Next
End Function
 
Public Function URLDecode(strURL)
Dim I
 
If InStr(strURL, "%") = 0 Then URLDecode = strURL: Exit Function
 
For I = 1 To Len(strURL)
    If Mid(strURL, I, 1) = "%" Then
       If eval("&H" & Mid(strURL, I + 1, 2)) > 127 Then
          URLDecode = URLDecode & Chr(eval("&H" & Mid(strURL, I + 1, 2) & Mid(strURL, I + 4, 2)))
          I = I + 5
       Else
          URLDecode = URLDecode & Chr(eval("&H" & Mid(strURL, I + 1, 2)))
          I = I + 2
       End If
    Else
       URLDecode = URLDecode & Mid(strURL, I, 1)
    End If
Next
End Function   
Private Sub Command1_Click()Sub Command1_Click()
Text2.Text = URLEncode(Text1.Text)
End Sub
 
 
Public Function URLEncode()Function URLEncode(ByRef strURL As String) As String
Dim I As Long
Dim tempStr As String
For I = 1 To Len(strURL)
    If Asc(Mid(strURL, I, 1)) < 0 Then
       tempStr = "%" & Right(CStr(Hex(Asc(Mid(strURL, I, 1)))), 2)
       tempStr = "%" & Left(CStr(Hex(Asc(Mid(strURL, I, 1)))), Len(CStr(Hex(Asc(Mid(strURL, I, 1))))) - 2) & tempStr
       URLEncode = URLEncode & tempStr
    ElseIf (Asc(Mid(strURL, I, 1)) >= 65 And Asc(Mid(strURL, I, 1)) <= 90) Or (Asc(Mid(strURL, I, 1)) >= 97 And Asc(Mid(strURL, I, 1)) <= 122) Then
       URLEncode = URLEncode & Mid(strURL, I, 1)
    Else
       URLEncode = URLEncode & "%" & Hex(Asc(Mid(strURL, I, 1)))
    End If
Next
End Function
 
Public Function URLDecode()Function URLDecode(ByRef strURL As String) As String
Dim I As Long
 
If InStr(strURL, "%") = 0 Then URLDecode = strURL: Exit Function
 
For I = 1 To Len(strURL)
    If Mid(strURL, I, 1) = "%" Then
       If Val("&H" & Mid(strURL, I + 1, 2)) > 127 Then
          URLDecode = URLDecode & Chr(Val("&H" & Mid(strURL, I + 1, 2) & Mid(strURL, I + 4, 2)))
          I = I + 5
       Else
          URLDecode = URLDecode & Chr(Val("&H" & Mid(strURL, I + 1, 2)))
          I = I + 2
       End If
    Else
       URLDecode = URLDecode & Mid(strURL, I, 1)
    End If
Next
End Function
 
Private Sub Command2_Click()Sub Command2_Click()
Text3.Text = URLDecode(Text2.Text)
End Sub
 
Private Sub Form_Load()Sub Form_Load()
Text1.Text = "http://www.microsoft.com/中国微软"
End Sub 
 
  纯 JavaScript 版的 ANSI 的 URL 编码与解码
 
 
JavaScript 版本中可以通过 encodeURI, encodeURIComponent 实现 UTF-8 的 URL 编码与解码,但要实现 ANSI 的就得自己写代码了。
之前有一个 JavaScript 与 VBScript 混合的 ANSI 的 URL 编码与解码,遗憾的是某些浏览器无法支持 VBScript,所以才有了本文纯 JavaScript 版的。
 
 
 
Unicode 与 ANSI 的编码转换
 
ANSI 编码与字符之间的转换 
 
function str2asc(str)
{
    var n = UnicodeToAnsi(str.charCodeAt(0));
    var s = n.toString(16);
    return s.toUpperCase();
} function asc2str(code)
{
    var n = AnsiToUnicode(code);
    return String.fromCharCode(n);
}  
URL 编码与解码
  function urlEncode(str)
{
    var ret = "";
    var strSpecial = "!\"#$%&’()*+,/:;<=>?[]^`{|}~%";
    var tt = "";
    for(var i = 0; i < str.length; i++)
    {
        var chr = str.charAt(i);
        var c = str2asc(chr);
        tt += chr + ":" + c + "n";
        if (parseInt("0x" + c) > 0x7f)
        {
            ret += "%" + c.slice(0,2) + "%" + c.slice(-2);
        }
        else
        {
            if (chr == " ")
                ret += "+";
            else if (strSpecial.indexOf(chr) != -1)
                ret += "%" + c.toString(16);
            else
                ret += chr;
        }
    }
   
    return ret;
}
 
function urlDecode(str)
{
    var ret = "";
    for (var i = 0; i < str.length; i++)
    {
        var chr = str.charAt(i);
        if (chr == "+")
        {
            ret += " ";
        }
        else if (chr == "%")
        {
            var asc = str.substring(i+1, i+3);
            if (parseInt("0x"+asc) > 0x7f)
            {
                ret += asc2str(parseInt("0x" + asc+str.substring(i+4, i+6)));
                i += 5;
            }
            else
            {
                ret += asc2str(parseInt("0x"+asc));
                i += 2;
            }
        }
        else
        {
            ret += chr;
        }
    }
   
    return ret;
}   url 编码 js url传参中文乱码解决方案(教程)
 前后台用js传参过程中,如果是中文就容易出现乱码,所以最好是先编码。 1.配置文件web.config中 在节中加上整个网站(的)编码方式。 
<globalization fileEncoding="GB2312" requestEncoding="GB2312" responseEncoding="GB2312"/> 
这样参数就以gb2312(的)中文编码方式传输了。而一般默认是utf-8. 
2.在传参是先编码在传输,接受时先编码,在接收。 
string mm=Server.URLEncode(你们); 
Response.Redirect(index.aspx?mm=+mm); 
然后在接收页解码: 
string mm = Server.URLDecode(Requext.querystring(mm)); 
javascript中存在几种对URL字符串进行编码(的)方法:escape(),encodeURI(),以及encodeURIComponent()。这几种编码所起(的)作用各不相同。 
escape() 方法: 
采用ISO Latin字符集对指定(的)字符串进行编码。所有(的)空格符、标点符号、特殊字符以及其他们非ASCII字符都将被转化成%xx格式(的)字符编码(xx等于该字符在字符集表里面(的)编码(的)16进制数字)。比如,空格符对应(的)编码是%20。 
不会被此方法编码(的)字符: @ * / + 
encodeURI() 方法: 
把URI字符串采用UTF-8编码格式转化成escape格式(的)字符串。 
不会被此方法编码(的)字符:! @ # $& * ( ) = : / ; ? + ' 
encodeURIComponent() 方法: 
把 URI字符串采用UTF-8编码格式转化成escape格式(的)字符串。与encodeURI()相比,这个方法将对更多(的)字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI(的)几个部分(的)话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。 
不会被此方法编码(的)字符:! * ( ) ' 
因 此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式(的)(比如原页面和目标页面(的)charset是一致(的)时候),只需要 使用 escape。如果你们(的)页面是GB2312或者其他们(的)编码,而接受参数(的)页面是UTF-8编码(的),就要采用encodeURI或者 encodeURIComponent。 
另外,encodeURI/encodeURIComponent是在javascript1.5之后引进(的),escape则在javascript1.0版本就有。  传参:用encodeURI("url参数")将url编码 
收参:用decodeURI("接收到(的)值")解码
 
js实现url加密,解密、
查看效果:js实现url加密,解密 <!--代码来自网络--> <title>js实现asp中的UrlEncode和UrlDecode--来自网络</title> <form action="" method="post" name="form"> <input type="text" size="50" name="code" maxlength="100" /><br /> <input type="submit" value="加密解密" /> </form> <script language="vbscript"> Function str2asc(strstr) str2asc = hex(asc(strstr)) End Function Function asc2str(ascasc) asc2str = chr(ascasc) End Function </script> <script language="javascript"> /*这里开始时UrlEncode和UrlDecode函数*/ function UrlEncode(str){ var ret=""; var strSpecial="!\"#$%&'()*+,/:;<=>?[]^`{|}~%"; for(var i=0;i<str.length;i++){ var chr = str.charAt(i); var c=str2asc(chr); //tt+= chr+":"+c+"n"; if(parseInt("0x"+c) > 0x7f){ ret+="%"+c.slice(0,2)+"%"+c.slice(-2); }else{ if(chr==" ") ret+="+"; else if(strSpecial.indexOf(chr)!=-1) ret+="%"+c.toString(16); else ret+=chr; } } return ret; } function UrlDecode(str){ var ret=""; for(var i=0;i<str.length;i++){ var chr = str.charAt(i); if(chr == "+"){ ret+=" "; }else if(chr=="%"){ var asc = str.substring(i+1,i+3); if(parseInt("0x"+asc)>0x7f){ ret+=asc2str(parseInt("0x"+asc+str.substring(i+4,i+6))); i+=5; }else{ ret+=asc2str(parseInt("0x"+asc)); i+=2; } }else{ ret+= chr; } } return ret; } ss="" aa=UrlEncode(ss) bb=UrlDecode(ss) document.write("编码后"+aa+"<br>"); document.write("解码后:"+bb);

JS中URL编码参数(UrlEncode)的更多相关文章

  1. JS获取url请求参数

    JS获取url请求参数,代码如下: // 获取url请求参数 function getQueryParams() { var query = location.search.substring(1) ...

  2. 【2017-06-27】Js中获取地址栏参数、Js中字符串截取

    一.Js中获取地址栏参数 //从地址栏获取想要的参数 function GetQueryString(name) { var reg = new RegExp("(^|&)&quot ...

  3. js获取url的参数和值的N种有效方法

    js获取url的参数和值的N种有效方法 function getParameterByName(name) { name = name.replace(/[\[]/, "\\\[" ...

  4. JS中给函数参数添加默认值(多看课程)

    JS中给函数参数添加默认值(多看课程) 一.总结 一句话总结:咋函数里面是可以很方便的获取调用函数的参数的,做个判断就好,应该有简便方法,看课程. 二.JS中给函数参数添加默认值 最近在Codewar ...

  5. js中函数的参数为函数的情况即回调函数

    js中函数的参数可以是数组对象也可以是函数,当参数为函数时我们叫做回调函数 //定义回调函数function B() { console.log("函数B")setTimeout( ...

  6. 【js与jquery】javascript中url编码与解码

    本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数 编码/解码 escape / u ...

  7. JS中的编码,解码类型及说明

    使用ajax向后台提交的时候 由于参数中含有#  默认会被截断 只保留#之前的字符  json格式的字符串则不会被请求到后台的action 可以使用encodeURIComponent在前台进行编码, ...

  8. JavaScript中url 传递参数&lpar;特殊字符&rpar;解决方法及转码解码的介绍

    有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.下表中列出了一些URL特殊符号及编码   十六进制值 1. + URL 中+号表示空格 %2B 2. 空 ...

  9. C&num;与JavaScript中URL编码解码问题&lpar;转&rpar;

    混乱的URI编码 JavaScript中编码有三种方法:escape.encodeURI.encodeURIComponent C#中编码主要方法:HttpUtility.UrlEncode.Serv ...

随机推荐

  1. &lpar;转&rpar; 变分自编码器(Variational Autoencoder&comma; VAE)通俗教程

    变分自编码器(Variational Autoencoder, VAE)通俗教程 转载自: http://www.dengfanxin.cn/?p=334&sukey=72885186ae5c ...

  2. JavaScript笔记基础篇&lpar;三&rpar;

    针对前段JS获取当前时间或者对时间数据处理方法汇总: javascript 字符串转化为日期 Java代码   var s="2010-5-18 12:30:20"; var t= ...

  3. google翻译,翻译当前的网页

    网页翻译为德语(Translate Page To German) <a href="javascript: void(window.open('http://translate.go ...

  4. Mongodb Gridfs

    http://www.cnblogs.com/lipan/archive/2011/03/21/1989409.html

  5. Sql server Lock

    http://www.cnblogs.com/*fu/archive/2013/11/28/3447870.html

  6. SQL Server 索引维护sql语句

    使用以下脚本查看数据库索引碎片的大小情况: 复制代码代码如下: DBCC SHOWCONTIG WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS  以 ...

  7. qt creator 中的&quot&semi;提升为&period;&period;&period;&quot&semi;功能简介

    1.新建一个项目 2.打开文件:mainwindow.ui ->拖一个 tree widget 控件到画布->右击弹出对话框->单击"提升为..."选项 3.输入 ...

  8. spring boot面试问题集锦

    译文作者:david  原文链接:https://www.javainuse.com/spring/SpringBootInterviewQuestions Q: 什么是spring boot? A: ...

  9. SVG绘制太极图

    思路:先画一整个圆,填充颜色为黑色,再用一个边框和填充颜色均为白色的长方形覆盖右半边的半圆,再以同一个圆心,相同半径绘制一整个圆,该圆的边线颜色为黑色,没有填充颜色,最后常规操作再画四个小圆 源代码: ...

  10. 建立标准编码规则(四)-C&num;编码规范分类及实现

    1 现实中的问题 在任何一个公司,每个程序员编写的习惯可能都是不一样的,大到命名空间,小到变量的名字.甚至,我们去github,里面的大牛每个开源的项目的命名规则可能都不一样. 我们通常会遇到下面的问 ...