客户端Cookie中文编程

汇川PLC和PLC之间ModebusTCP通讯 然后在全局变量中创建相应的变量关联IW和QW的寄存器创建全部变量//AM402作为主站——读H3U(D12-D21)//AM402作为主站——写给H3U(D200-D209)或者使用数组的方式。 阅读详情

客户端Cookie中文编程
2000-11-28·  ·YESKY

------------------------------------------------------------------------------- -

  在Cookie的使用中,我们发现这样一个问题:如果写入Cookie的内容是中文(如用户 称呼),用服务器端程序(如ASP或PHP)读出完全正确,但是用一般的JavaScript或 VBScript的读Cookie函数取出的却是一堆乱码。这是一个棘手的问题,因为在有些情况下 ,Cookie的内容需要在客户机端用脚本语言读取。如果你写入了中文,得到了一堆乱码, 是不是感觉很别扭呢?解决这个问题,还要从Cookie的存取方式说起。
  我们知道,写入Cookie内容前需要进行escape(十六进制编码),编码时又是以字节 为单位的,这就是问题的关键所在:任何一个汉字都会被拆成两个字节分别编码;而在读 Cookie时,unescape又以字节单位解码,因此最后每个汉字都变成了两个字节的乱码。怎 么办呢?ASP或PHP方式能够正确读出,应该是在unescape解码后,又按照unicode编码把其 中的汉字拼了出来。如果这样的话,能不能找到一种变通的方法解决这个问题呢?仔细研 究后发现,只要在十六进制codec(编解码)过程中能够保存汉字信息就行了,因而我们需 要再外包一层codec过程,方案如下:

  1.在escape编码前,把Cookie字符串中的每个字符转换为unicode码的字符串形式(用 一特殊字符作为字串的分隔符)。

  2.在unescape解码后,先把所有unicode字串提取出来,再用对应的函数转换为原字符 。

<SCRIPT LANGUAGE=javascript>
<!--
file://编码程序:
function CodeCookie(str)
{
 var strRtn="";

 for (var i=str.length-1;i>=0;i--)
 {
  strRtn+=str.charCodeAt(i);
  if (i) strRtn+="a"; file://用a作分隔符
 }
 return strRtn;
}

file://解码程序:
function DecodeCookie(str)
{
 var strArr;
 var strRtn="";

 strArr=str.split("a");

 for (var i=strArr.length-1;i>=0;i--)
 strRtn+=String.fromCharCode(eval(strArr[i]));

 return strRtn;
}
file://-->
</script>


VBScript版程序如下:

<SCRIPT LANGUAGE=vbscript>
<!--
"编码程序:
function CodeCookie(str)
Dim i
Dim strRtn

for i=len(str) to 1 step -1
strRtn=strRtn & ascw(mid(str,i,1))
if (i<>1) then strRtn = strRtn & "a" "用a作分隔符
next
CodeCookie=strRtn
end function

"解码程序:
function DecodeCookie(str)
Dim i
Dim strArr,strRtn

strArr=Split(str,"a");

for i=UBound(strArr)-LBound(strArr) to 1 step -1
strRtn=strRtn & chrw(Val(strArr(i)))
next

DecodeCookie=strRtn
end function
-->
</script>

例如你要写入的Cookie内容是"一顶abc",经过CodeCookie变为"99a98a97a- 31029a26432a"(基于安全考虑,将字符串反转),再经过escape编码后变为 "99a98a97a%2D31029a26432a"(escape编码将除字母和数字以外的字符转换为十六进制%XX 的形式),注意分隔符不能选%,D和数字。当然,如果有类似密码的重要信息,还需要在 加密上再强化一下。因为写入Cookie的一般都是短信息,编码后增加的一些字节可忽略不 计。下面的JavaScript读写Cookie函数中就加入了以上的中文支持。

function SetCookie(name,value,expires)
{
 var exp=new Date();
 exp.setTime(exp.getTime()+expires*60*1000);
 document.cookie=name+"="+escape(CodeCookie(value))+" ;  expires="+exp.toGMTString()+" ; path=/";
}

function GetCookie (name)
{
 var strArg=name+"=";
 var nArgLen=strArg.length;
 var nCookieLen=document.cookie.length;
 var nEnd;
 var i=0;
 var j;

while (i<nCookieLen)
{
 j=i+nArgLen;
 if (document.cookie.substring(i,j)==strArg)
{
 nEnd=document.cookie.indexOf (";",j);
 if (nEnd==-1) nEnd=document.cookie.length;
 return DecodeCookie(unescape(document.cookie.substring(j,nEnd)));
}
 i=document.cookie.indexOf(" ",i)+1;
 if (i==0) break;
}
 return null;
}


  如果用CGI程序写入中文Cookie,客户端读取。如在ASP里,可以先使用前述的编码函 数后,再用response写入,例如:response.cookies("Name")=CodeCookie("张三")至此, 中文Cookie的问题基本解决。若有相关问题,请到www.coolbel.com/saibai交流。

基于双目视觉的行车中障碍距离检测方法研究与目标跟踪 本文将介绍基于Python语言的双目视觉技术,以及如何使用该技术检测行车中的障碍物并跟踪目标。双目视觉利用两个摄像头模拟人眼的立体视觉,通过对两个摄像头所捕捉的图像进行比较和分析,可以得到物体的深度信息。首先,我们需要安装Python的OpenCV库,该库提供了丰富的图像处理和计算机视觉功能。接下来,我们进入一个循环中,不断读取左右图像,并将其转换为灰度图像。在视差图上,您可以实现目标检测和跟踪算法来识别和跟踪行车中的障碍物。请注意,上述代码只是一个简单示例,您可以根据具体需求和算法进行修改和扩展。 阅读详情

相关推荐

Windows环境下IBSIMU的安装

本文主要介绍离子束仿真程序IBSIMU在Windows环境下的安装。

C_Tso的博客 2993

JavaScript 解决cookie 保存中文

如果在cookie中存入中文,极易出现问题。 js在存入cookie时,利用escape() 函数可对字符串进行编码, 用unescape进行解码 这样就可以在所有的计算机上读取该字符串。 document.cookie="menu1="+ escape(me.parentElement.parentElement.previousElementSibling.innerText); ...

BrightSt的博客 5563

Abaqus梁模型仿真中的常见陷阱与优化策略

本文深入探讨了Abaqus梁模型仿真中的常见陷阱与优化策略,涵盖几何建模、材料属性设置、边界条件处理等关键环节。针对梁截面方向定义、网格划分、复合截面建模等典型问题,提供了实用的Python脚本示例和优化方案,帮助工程师避免计算错误并提升仿真精度。文章特别强调了动力分析中的网格密度要求和材料非线性考虑,为复杂工程应用提供专业指导。

weixin_29099217的博客 461

vscode 调试终端不关闭_2021年最强的10个VS Code扩展

PeacockPeacock是John Papa的扩展,John Papa以其社区工作和Pluralsight课程而闻名。孔雀让您快速更改VS Code工作区的颜色。当您使用多个实例或使用VS Live Share功能时,这特别有用。以下是这种情况的示例:Git GraphGit Graph使您可以在VS Code中可视化来自存储库的图形。可以按照您想要的方式进行配置,目前市场上有5星(...

weixin_39979215的博客 523

Unity Android平台下插件/SDK开发通用流程

本文主要面向对Android开发不甚了解的Unity开发者,介绍了基于最新的Android Studio的标准Android开发环境与项目结构的配置流程,在此基础上,开发者可以快速的进行SDK的接入与插件的开发。

ZhangDi2017的博客 1万+

OLED的字模提取(保姆级)---基于PCtoLCD2013

做为一个刚刚开始接触编程不久的白菜,这个OLED想做一个信息显示,可是商家给我的例程里就是88,816两种字体的格式,我的屏幕是0.91寸的8*16的字体显示上感觉特别丢丢儿小,我就想整个大的,哎,只怪直接学习习惯不好,总是学一半,绕了好大一圈,才搞好,想写一篇博客,时刻提醒踏实学习,第一次写博客,小白一枚,勿喷。。 OLED屏幕驱动程序功能 我们对Markdown编辑器进行了一些功能拓展与语法支...

qq_44886611的博客 7781

cookie的使用

Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一。Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一起发送到服务器。浏览器对 Cookie 的大小有限制,因此,只有不超过 4096 字节才能保证被接受。编写Cookie //方式1:Response.Cookies["username"].value

snooker_li的专栏 901

一文解读DeepSeek训练数据集

本文重点以DeepSeek为例,详细介绍预训练数据集相关内容。大语言模型LLM(如DeepSeek、ChatGPT、文心一言等)的“智慧”源于它们学习的海量数据集。简单来说,数据集就是模型的“知识库”,通常由互联网公开的文本、图片、视频等。这些数据需满足两个特点:规模大和多样性。规模大是指数据量可达千亿级词汇,让模型学习复杂规律;多样性则涵盖多领域(如科技、文学)、多语言、多形式(对话、新闻),帮助模型适应不同场景。例如,训练数据中既有百科知识,也有日常对话,模型才能既解答专业问题,又能闲聊。

u013891230的博客 7089

客户端Cookie中文编程 (转)

客户端Cookie中文编程 (转)[@more@]客户端Cookie中文编程2000-11-28·  ·YESKY ------------------------------------------------------...

csd3176的博客 146

TI DSP的 FFT与IFFT库函数的使用测试

/** * Copyright (C) 2013 Guangzhou Tronlong Electronic Technology Co., Ltd. - www.tronlong.com * * @file dsplib_fft.c * * @brief Example application main file. * This application will run FFT performance test. * * @author Tronlong <support@tron.

ToneChip的专栏,一个传统的嵌入式码农,裸机编程 2678

SDA 还是 SDI:SAP HANA 数据虚拟化与数据集成的取舍、组合与实战

结论先放在前面:SDA 面向数据虚拟化与联邦查询,强调不落地、不复制、按需实时访问;SDI 面向数据集成与复制,强调抽取、转换、装载与近实时增量同步。两者共享 Remote Source 与 Adapter 的理念,但侧重点与运行时组件明显不同。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 586

客户端Cookie中文编程(上)

Cookie的使用中,我们发现这样一个问题:如果写入Cookie的内容是中文(如用户称呼),用服务器端程序(如ASP或PHP)读出完全正确,但是用一般的JavaScript或VBScript的读Cookie函数取出的却是一堆乱码。这是一个棘手的问题,因为在有些情况下,Cookie的内容需要在客户机端用脚本语言读取。如果你写入了中文,得到了一堆乱码,是不是感觉很别扭呢?解决这个问题,还要从Cooki

小剑 专栏 591

【C++项目】从零实现RPC框架「三」:项⽬抽象层实现

本文详细介绍了如何从零实现一个 C++ RPC(远程过程调用)框架,包括通信抽象、消息抽象、通信实现、以及消息分发器的实现。通过系统化的代码示例,展示了如何构建一个高效、灵活且可扩展的 RPC 框架。

You build it, you run it 2162

客户端Cookie中文编程(下)

例如你要写入的Cookie内容是"一顶abc",经过CodeCookie变为"99a98a97a-31029a26432a"(基于安全考虑,将字符串反转),再经过escape编码后变为"99a98a97a%2D31029a26432a"(escape编码将除字母和数字以外的字符转换为十六进制%XX的形式),注意分隔符不能选%,D和数字。当然,如果有类似密码的重要信息,还需要在加密上再强化一下。因为

小剑 专栏 564

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java Cookie使用Unicode编码中文

中文和英文字符不同,中文属于Unicode字符,在内存中占用4个字符,而英文属于ASCII字符,内存中只占2个字节。Cookie中使用Unicode字符时需要对Unicode字符进行编码,否则会出现乱码。编码可以使用java.net.URLEncoder类的encode(String str,String encoding)方法,解码使用java.net.URLDecoder类的decode(Str

wuruiaoxue的专栏 3185

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

一些问题

问题一: 出现完全的原因? 1.多线程 2.共享数据 3.多条语句操作同一条数据 class MyThread implements Runnable { int i = 1; @Override public void run() { try { Thread.sleep(1); } catch (InterruptedException e) { // TODO Aut

qq383264679的专栏 665

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JavaWeb学习总结(十六)Cookie保存中文内容

Cookie的值保存中文内容,可以使用Java.net.URLDecoder进行解码。 示例: <%@page import="java.net.URLDecoder"%> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%&gt...

weixin_30886233的博客 96

Java Cookie 中文乱码解决方法

String value = java.net.URLEncoder.encode("中文","utf-8"); Cookie cookie = new Cookie("chinese_code",value); cookie.setMaxAge(60*60*24*6); response.addCookie(cookie);       encode() 只有一个参数的已经过时了,...

Loquat 的学习日志 246

PHP 笔试题整理

1、写出下面输出的结果: $num = 10; function multiply(){   $num = $num * 10; } multiply(); echo $num; $a = "abcd"; $x = & $a; unset($a); echo $x; 答:第一个输出10 , 第二个输出 abcd 2、将字符串$a = "abcdef" 的每个字符逐个取出保存到数组里并输出:

885

关于Cookie用法

Cookie能让服务器端的程序能将一些只需保存在客户端,或者在客户端进行处理的数据,放在本地的计算机中,不需通过网络的传播。 例如,有的网站有记录密码的功能,实际上就是用的Cookie,在访问是不用再重新输入密码。这样既有方便的地方,也有很大的漏洞,就是安全性不高。如下两个JSP,其中一个将数据设置到客户端,一个是从中取得数据。 Cookie k1=new Cook

西北狼的博客 320

Cookie的一些重要特点

Cookie的细节:一、 一次可不可以发送多个cookie?二、 cookie在浏览器中保存多长时间?三、 cookie能不能存中文?四、 cookie共享问题? 一、 一次可不可以发送多个cookie? ①.可以发送多个cookie ②.可以创建多个cookie对象,使用response调用多次addCookie方法发送cookie即可。 (1)创建CookieDemo3文件,发送多个Cook...

派拉斯兔子的博客 765

PHP常见面试题及答案

1,用PHP打印出前一天的时间,格式是2006-5-10 22:21:21 echo date("Y:m:d H:i:s",strtotime("-1 day")); 2,echo(),print(),print_r()的区别 echo是语言结构,无返回值;print功能和echo基本相同,不同的是print是函数,有返回值;print_r是递归打印,用于输出数组对象 3,能够使HT...

title 701

Cookie的发送、获取、Cookie传递中文

Cookie的发送、获取、Cookie传递中文

斯文~ 1906

Cookie是什么及用法详解

Cookie是一个客户端会话技术,是由服务器端创建,放在响应头发送到客户端保存,用于存储少量数据,因为存放在客户端中,容易被人编造伪造,不是很安全。一般不用于存储重要信息。它是通过键值对传递信息的。

m0_55814208的博客 3713

Volley框架之使用GET或POST将cookie传给服务器

Volley框架使用GET或POST将cookie传给服务器,需要覆盖一个方法:public Map<String, String> getHeaders() throws AuthFailureError 具体方法如下:

覃大畅的博客 1130

Ruby CGI Cookie

本文介绍了Ruby中通过CGI模块操作Cookie的方法。主要内容包括:Cookie的基本概念和用途,CGI::Cookie类的创建与属性设置(如过期时间、路径等),如何在HTTP响应中设置Cookie,以及如何读取客户端发送的Cookie。文中提供了创建、更新和删除Cookie的示例代码,并强调了安全性注意事项(如启用secure和httponly属性、防止XSS攻击)。最后指出虽然CGI编程简单直接,但现代Web开发更推荐使用Rails等框架。

likuoelie的博客 843
上一篇: 用户认证及管理(完全版)
下一篇: 一个简单的Webmail系统
peacock
博客等级 码龄27年 15粉丝 13原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值