日志:中文 URI 参数乱码之 encodeURI、encodeURIComponent、escape 作为 Ajax 中文参数编码给 ASP 的记录

news2024/12/28 12:54:09

前面提到的了 ASP 输出 UTF-8 编码的中文不定时出现乱码的解决方案:ASP页面改为UTF-8编码后,刷新页面中文输入输出不定时乱码终极解决方案

今天遇到的则是输入 UTF-8 编码中文 URI 参数乱码的问题,第一次可以,刷新后取得的输入参数就变成乱码。以下是解决方案:

针对 Ascii 32(0x20)~126(0x7E):

0x20~0x7E
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~    完整时

          *+ -./0123456789      @ABCDEFGHIJKLMNOPQRSTUVWXYZ    _ abcdefghijklmnopqrstuvwxyz			escape()未编码字符
 %20%21%22%23%24%25%26%27%28%29*+%2C-./0123456789%3A%3B%3C%3D%3E%3F@ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E

 ! #$ &'()*+,-./0123456789:; = ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ    _ abcdefghijklmnopqrstuvwxyz   ~		encodeURI()未编码字符,空格编码为%20
 %20!%22#$%25&'()*+,-./0123456789:;%3C=%3E?@ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D~

 !     '()*  -. 0123456789       ABCDEFGHIJKLMNOPQRSTUVWXYZ    _ abcdefghijklmnopqrstuvwxyz   ~		encodeURIComponent()未编码字符,空格编码为%20
 %20!%22%23%24%25%26'()*%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D~

          *  -. 0123456789       ABCDEFGHIJKLMNOPQRSTUVWXYZ    _ abcdefghijklmnopqrstuvwxyz			form data 提交后剩余未编码字符

针对中文

escape("中文"):               %u4E2D%u6587              Unicode的16进制形式,等价于 &#20013;&#25991;    hex(20013)=&H4E2D
encodeURI("中文"):            %E4%B8%AD%E6%96%87        UTF-8
encodeURIComponent("中文"):   %E4%B8%AD%E6%96%87        UTF-8

虽然 escape 函数已被废弃,推荐使用 encodeURI 或 encodeURIComponent,而且 jq 的 serialize 已经用 encodeURI 转换了 URI 中的中文,因此不能再对 serialize 的结果进行 encodeURI 转换,单独测试了只用  encodeURI 和 encodeURIComponent 不用 serialize ,除非将 % 符号替换掉,否则中文参数提交到 ASP 页面后,ASP 的 Request 接收到参数二次刷新依然会是乱码,因为是 UTF-8 编码,简言之,就是 ASP 接收处理 encodeURIComponent 编码后的中文时灵时不灵的。故对于 ASP 来说,最适配的 URI 中文参数传递转换应该还是推荐 escape 转 Unicode 编码,不和转换为 UTF-8 的编码扯皮,扯不清楚,于是自己写了个简单的 VBS 版 unescape 

' VBS 版 unescape
Public Function unescape(s)
    Dim w
    w = wsplit(s, "%u", 4)  '--处理Unicode编码双字节
    w = wsplit(w, "%", 2)   '--处理Unicode编码单字符
    unescape = w
End Function
Public Function wsplit(s, sp, L)
    Dim w, p, i
    w = s
    If (InStr(w, sp) > 0) Then
         p = Split(w, sp)
         w = p(0)
         For i = 1 To UBound(p)
             w = w + ChrW("&H" & Mid(p(i), 1, L))    '----取出定长编码字节
             If Len(p(i)) > L Then  '----取出后面的编码字符
                 w = w + Mid(p(i), L + 1)
             End If
         Next
     End If
     wsplit = w
End Function

'以下是针对 Unicode 编码的 “&#20013;&#25991;” 形式的解码函数
public Function asctow(s)
    Dim p, w, a, i
    w = s
    If (InStr(s, "&#") > 0) Then
        p = Split(s, "&#")
        w = ""
        For i = 0 To UBound(p)
            If (InStr(p(i), ";") > 0) Then
                a = Split(p(i), ";")
                a(0) = Replace(a(0), ";", "")
                w = w + (ChrW(a(0)) + a(1))
            Else
                w = w + p(i)
            End If
        Next
    End If
    asctow = w
End Function

这回,不管怎么刷新都不会乱码了。

dim TmpStrA
rw "代码:<br/>dim TmpStrA" & "<br/>"
rw "TmpStrA=" & d & "A%20%21%22%23%24%25%26%28%29%u4E2DD%u6587123%u6587%u5B57Bc" & d & "<br/>"
rw "rw TmpStrA" & "<br/>"
rw "Rw " & d & "< hr/" & d & "<br/>"
rw "rw unescape(TmpStrA)" & "<br/><br/>"
Rw "<hr/> 运行结果:<br/><br/>"
TmpStrA="A%20%21%22%23%24%25%26%28%29%u4E2DD%u6587123%u6587%u5B57Bc"
rw TmpStrA
Rw "<hr/>"
rw unescape(TmpStrA)
re

但是 jq 的 .serialize() 默认会将中文参数用 encodeURIComponent() 转换掉,因此,不能用   .serialize() 。还是自己组装一下参数了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Intern大模型训练营(八):Llamaindex RAG 实践

1. 基于 LlamaIndex 构建自己的 RAG 知识库 首先在Intern Studio中申请30% A100的开发机。 进入开发机后&#xff0c;创建新的conda环境&#xff0c;命名为 llamaindex&#xff0c;在命令行模式下运行&#xff1a; conda create -n llamaindex python3.10 复制完成后&#…

leetcode104:二叉树的最大深度

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,null,2] 输出…

Unity插件-Smart Inspector 免费的,接近虚幻引擎的蓝图Tab管理

习惯了虚幻的一张蓝图&#xff0c;关联所有Tab &#xff08;才发现Unity&#xff0c;的Component一直被人吐槽&#xff0c;但实际上是&#xff1a;本身结构Unity 的GameObject-Comp结构&#xff0c;是好的不能再好了&#xff0c;只是配上 smart Inspector就更清晰了&#xff0…

RDIFramework.NET CS敏捷开发框架 V6.1发布(.NET6+、Framework双引擎、全网唯一)

RDIFramework.NET C/S敏捷开发框架V6.1版本迎来重大更新与调整&#xff0c;全面重新设计业务逻辑代码&#xff0c;代码量减少一半以上&#xff0c;开发更加高效。全系统引入全新字体图标&#xff0c;整个界面焕然一新。底层引入最易上手的ORM框架SqlSugar&#xff0c;让开发更加…

运行springBlade项目历程

框架选择 官网地址&#xff1a;https://bladex.cn 使用手册&#xff1a;https://www.kancloud.cn/smallchill/blade 常见问题&#xff1a;https://sns.bladex.cn/article-14966.html 问答社区&#xff1a;https://sns.bladex.cn 环境配置 存在jdk8的情况下安装jdk17 jdk17gi…

图形 2.7 LDR与HDR

LDR与HDR B站视频&#xff1a;图形 2.7 LDR与HDR 文章目录 LDR与HDR基本概念LDRHDR为什么需要HDR不同显示屏的差异 Unity中的HDRCamera HDR 设置Lightmap HDR设置拾色器 HDR设置优缺点 HDR与Bloom通常Bloom渲染步骤渲染出原图获取图像中较亮部分高斯模糊叠加 Unity中Bloom渲染…

单片机设计智能翻译手势识别系统

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在全球化的浪潮下&#xff0c;语言的多样性也为人们的交流带来了不小的挑战…

Python调用API翻译Excel中的英语句子并回填数据

一、问题描述 最近遇到一个把Excel表中两列单元格中的文本读取&#xff0c;然后翻译&#xff0c;再重新回填到单元格中的案例。大约有700多行&#xff0c;1400多个句子&#xff0c;一个个手动复制粘贴要花费不少时间&#xff0c;而且极易出错。这时&#xff0c;我们就可以请出…

TypeORM在Node.js中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 TypeORM在Node.js中的应用 TypeORM在Node.js中的应用 TypeORM在Node.js中的应用 引言 TypeORM 概述 定义与特点 发展历程 TypeO…

干货分享之Python爬虫与代理

嗨伙伴们&#xff0c;今天是干货分享哦&#xff0c;可千万不要错过。今天小蝌蚪教大家使用phthon时学会巧妙借用代理ip来更好地完成任务。 让我们先了解一下为什么说咱们要用爬虫代理ip呢&#xff0c;那是因为很多网站为了防止有人过度爬取数据&#xff0c;对自身资源造成损害…

腾讯云双11最强攻略:如何选购优惠产品,薅最划算的羊毛

目录 一、首选优惠产品 二、可参与拼团的产品&#xff1a;超值组合优惠 三、不推荐购买的产品 四、注意事项与优惠最大化技巧 总结 腾讯云的双11活动力度空前&#xff0c;适合个人开发者、中小企业甚至是大型公司。这份攻略将帮你了解该购买哪些产品&#xff0c;不该购买哪…

labview实现功能性全局变量

在日常的项目中&#xff0c;笔者最长使用的就是全局变量&#xff0c;这样用起来不仅省心省力&#xff0c;而且传值也很方便&#xff0c;没有什么阻碍&#xff0c;想要传什么数据一根线拉过去就可以了。后面才知道如果一直使用全局变量会导致读写卡死的状态&#xff0c;而且还有…

软件工程笔记二—— 软件生存期模型

目录 瀑布模型 瀑布模型的特点 阶段间具有顺序性和依赖性。 推迟实现的观点 质量保证的观点 瀑布模型的优点 瀑布模型的缺点 快速原型模型 快速原型模型的优点 快速原型模型的缺点 增量模型 增量模型的优点 增量构件开发 螺旋模型 完整的螺旋模型&#xff08;顺…

C++ —— 哈希详解 - 开散列与闭散列

目录 1. 哈希的概念 1.1 直接定址法 1.2 哈希冲突 1.3 负载因子 1.4 哈希函数 1.4.1 除法散列法/除留余数法 1.4.2 乘法散列法 1.4.3 全域散列法 1.5 处理哈希冲突 1.5.1 开放定址法&#xff08;闭散列&#xff09; 1. 线性探测&#xff08;挨着查找&#xff09; 2.…

微波无源器件 OMT1 一种用于倍频程接收机前端的十字转门四脊正交模耦合器(24-51GHz)

摘要&#xff1a; 我们报道了一种用于天文学射电望远镜的毫米波波长接收机的一种十字转门四脊OMT的设计&#xff0c;制造和实测结果。此四脊OMT被直接兼容到一个四脊馈电喇叭来实现可以拓展矩形波导单模带宽的双极化低噪声接收机。使用了24-51GHz的带宽&#xff0c;OMT证实了0.…

如何在 WordPress 中轻松强制所有用户退出登录

作为一名长期管理 WordPress 网站的站长&#xff0c;我深知维护网站安全性的重要性。尤其是在面对会员网站或付费内容平台时&#xff0c;确保所有用户的登录状态是最新的&#xff0c;是维持网站正常运营的关键之一。今天&#xff0c;我就分享一下如何通过简单的步骤&#xff0c…

RT-DETR融合[ECCV2024]自调制特征聚合SMFA模块及相关改进思路

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《SMFANet: A Lightweight Self-Modulation Feature Aggregation Network for Efficient Image Super-Resolution》 一、 模块介绍 论文链接&#xff1a;https://link.springer.…

WebAPI性能监控-MiniProfiler与Swagger集成

Net8_WebAPI性能监控-MiniProfiler与Swagger集成 要在.NET Core项目中集成MiniProfiler和Swagger&#xff0c;可以按照以下步骤操作&#xff1a; 安装NuGet包&#xff1a; 安装MiniProfiler.AspNetCore.Mvc包以集成MiniProfiler。安装MiniProfiler.EntityFrameworkCore包以监…

第十五章 Spring之假如让你来写AOP——Joinpoint(连接点)篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

喜讯 | 科东软件荣获广东省工业软件科学技术进步奖一等奖

工业软件是制造业数字化、智能化转型升级的核心支撑&#xff0c;贯穿于工业生产的全过程&#xff0c;包括研发设计、测试&#xff0c;智能装备与操作系统嵌入式&#xff0c;系统与平台&#xff0c;算法、模型与工具等类型。通过开展工业软件科学技术奖评选活动&#xff0c;激励…