网页设计学习笔记

HTML,CSS,JavaScript

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

JavaScript 中的字符串编解码函数主要有 escape 与 unescape,encodeURI 与 decodeURI,以及 encodeURIcomponent 与 decodeURIcomponent 这三种。这几个函数都不对 ASCII 的字母和数字进行编码。

  • escape 函数不编码 * + - . / @ _ 这几个字符,将中文编码为形如 %u4E2D 的形式,其中 4E2D 是“中”字的 UTF-16 编码。这个函数已经在 ECMAScript v3 中废弃。
  • encodeURI 函数不编码 ! ' ( ) * - . _ ~ 以及 # $ & + , / ; : = ? @ 这些字符,将中文编码形如 %E4%B8%AD 的形式,其中 E4B8AD 是“中”字的 UTF-8 编码。
  • encodeURIcomponent 不编码 ! ' ( ) * - . _ ~ 这些字符,对中文的编码和 encodeURI 函数一样。

encodeURI 和 encodeURIcomponent 的区别从它们的函数名可以看出来:前者可以将字符串编码为合法的 URI 地址,而后者可以将字符串编码为合法的 URI 地址组成部分(例如查询字符串的 key 或者 value)。

PHP 中的字符串编解码函数主要有 urlencode 与 urldecode 以及 rawurlencode 与 rawurldecode 这两种,它们同样不对ASCII 的字母和数字进行编码。

  • urlencode 函数不编码 - . _  这几个字符,并将空格转化为 + 号,将中文编码形如 %E4%B8%AD 的形式,其中 E4B8AD 是“中”字的 UTF-8 编码。
  • rawurlencode 函数不编码 - . _  这几个字符,对空格同样进行编码,将中文编码形如 %E4%B8%AD 的形式,其中 E4B8AD 是“中”字的 UTF-8 编码。

JavaScript 和 PHP 的各种字符串编码函数虽然都不编码某些字符,但是对应的解码函数却可以解码这些字符。基本上,为保证对应的一致性,同时用 JavaScript 的 encodeURIcomponent/decodeURIcomponent 函数和 PHP 的 rawurlencode/rawurldecode 函数是可靠的。

参考资料:
[1] JavaScript escape() 函数
[2] encodeURI - JavaScript | MDN
[3] encodeURIComponent - JavaScript | MDN
[4] PHP: urlencode - Manual
[5] PHP: rawurlencode - Manual
[6] PHP and JS escaping
[7] JavaScript rawurlencode function

posted on 2013-01-07 16:19  zoho  阅读(501)  评论(0编辑  收藏  举报