引用地址:http://vseb.blog.sohu.com/67136922.html
这是一个哪里都能找到的操作cookie的JavaScript函数:
很遗憾,如果让PHP设定cookie的值为中文,然后让这个JavaScript读取,就会出现乱码:
反之,如果让JavaScript设定了一个中文cookie值,由PHP进行读取,也会出现乱码:
观察上面的乱码,你会发现% u4E2D% u6587刚好是“中文”两个汉字的unicode编码,第一个想法是直接解码,但是PHP里面似乎没有可以把unicode编码转换为汉字的便捷方法。(WordPress倒是不错,不加空格倒是给解码出来了!)
在《JavaScript: The Definitive Guide, 4th Edition》中写到:
In client-side JavaScript, a common use of escape( ) is to encode cookie values, which have restrictions on the punctuation characters they may contain.
在客户端脚本程序中,escape( )函数可以被用作对具有不规范标点的cookie进行编码。(就像我们函数中所用到的一样)
Although the escape( ) function was standardized in the first version of ECMAScript, it has been deprecated and removed from the standard by ECMAScript v3. Implementations of ECMAScript are likely to implement this function, but they are not required to. In JavaScript 1.5 and JScript 5.5 and later, you should use encodeURI( ) and encodeURIComponent( ) instead of escape( ).
虽然escape( ) 已经在ECMAScript中被标准化,但是在ECMAScript v3中,escape( ) 被剔出,如果需要在JavaScript 1.5 和JScript 5.5以后的版本中使用这个函数,建议使用encodeURI( )和encodeURIComponent( )。
按照手册的建议,我修改了JavaScript函数中的escape()和unescape()为encodeURI()和decodeURI(),结果异常的顺利,下面给出修改后的代码和调试程序: