php:setcookie(\'name\', \'qidizi中\')中文与客户端解码获取关系

setcookie()的php中其中一点提醒

cookie 中值的部分在发送的时候会被自动用 urlencode编码并在接收到的时候被自动解码并把值赋给与自己同名的 cookie 变量。如果不想这样并且在使用 PHP 5 的话,可以用 来代替。

在发送时编码

浏览器向php发送再用url来解码

php设置的header

Set-Cookie    UID_USER_PWd=32%5Eqidizi%E6%B5%8B%2B%5E982312270e1f07623afd3374a2e4d46c3053e586b0eda760fb0e461c2f657aaf8de9eb5725459af7; expires=Tue, 26-Feb-2013 16:00:00 GMT; path=/; domain=.chinahrd.net
从document.cookie得到的值 没变
UID_USER_PWd=32%5Eqidizi%E6%B5%8B%2B%5E982312270e1f07623afd3374a2e4d46c3053e586b0eda760fb0e461c2f657aaf8de9eb5725459af7

 

其实中文部分是    qidizi测+

所以得到js中得到cookie的值时应该使用decodeURIComponent来解码,而不是escape,这是php的中文处理,其它后台语言就不清楚了.

escape是乱码
>>> unescape( 'qidizi%E4%B8%AD')"qidizi???">>> decodeURIComponent( 'qidizi%E4%B8%AD')

"qidizi中"


到此setcookie配合decodeuricomponent可以正常处理中文

如果使用了setrawcookie自己urlencode即可,接收时肯定是自动使用decode了


js对encodeURIComponent说明


该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

 

php对urlencode说明

除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。

虽然有点区别,但是发现它们没有影响互相的编解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值