posts - 32,  comments - 3,  trackbacks - 0
            2011年8月5日

          發(fā)現(xiàn)現(xiàn)在幾乎所有的網(wǎng)站都對(duì)url中的漢字和特殊的字符,進(jìn)行了urlencode操作,也就是:

          http://hi.baidu.com/%BE%B2%D0%C4%C0%CF%C8%CB/creat/blog/

          這個(gè)樣子,中間%形式的,肯定就是我的登錄用戶(hù)名稱(chēng)了吧。

          為什么對(duì)這些字符進(jìn)行了u的編碼形式,是為了字符編碼(gbk、utf8)還是為了不出現(xiàn)特殊的字符在url中?都知道要轉(zhuǎn),但是轉(zhuǎn)了的真正好處呢。查看了網(wǎng)上的很多資料,也沒(méi)有找到更加準(zhǔn)確的說(shuō)法。

          url轉(zhuǎn)義其實(shí)也只是為了符合url的規(guī)范而已。因?yàn)樵跇?biāo)準(zhǔn)的url規(guī)范中中文和很多的字符是不允許出現(xiàn)在url中的。

          看一下php的urlencode的說(shuō)明了。

          urlencode — 編碼 URL 字符串

          string urlencode ( string $str )

          返回字符串,此字符串中除了 -_. 之外的所有非字母數(shù)字字符都將被替換成百分號(hào)(%)后跟兩位十六進(jìn)制數(shù),空格則編碼為加號(hào)(+)。此編碼與 WWW 表單 POST 數(shù)據(jù)的編碼方式是一樣的,同時(shí)與 application/x-www-form-urlencoded 的媒體類(lèi)型編碼方式一樣。由于歷史原因,此編碼在將空格編碼為加號(hào)(+)方面與 RFC1738 編碼(參見(jiàn) rawurlencode())不同。此函數(shù)便于將字符串編碼并將其用于 URL 的請(qǐng)求部分,同時(shí)它還便于將變量傳遞給下一頁(yè)。

          標(biāo)準(zhǔn)的英文說(shuō)明是:

          "...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL."

          那哪些字符是需要轉(zhuǎn)化的呢?

          1. ASCII 的控制字符

          這些字符都是不可打印的,自然需要進(jìn)行轉(zhuǎn)化。

          2. 一些非ASCII字符

          這些字符自然是非法的字符范圍。轉(zhuǎn)化也是理所當(dāng)然的了。

          3. 一些保留字符

          很明顯最常見(jiàn)的就是“&”了,這個(gè)如果出現(xiàn)在url中了,那你認(rèn)為是url中的一個(gè)字符呢,還是特殊的參數(shù)分割用的呢?

          4. 就是一些不安全的字符了。

          例如:空格。為了防止引起歧義,需要被轉(zhuǎn)化為“+”。

          明白了這些,也就知道了為什么需要轉(zhuǎn)化了,而轉(zhuǎn)化的規(guī)則也是很簡(jiǎn)單的。

          按照每個(gè)字符對(duì)應(yīng)的字符編碼,不是符合我們范圍的,統(tǒng)統(tǒng)的轉(zhuǎn)化為%的形式也就是了。自然也是16進(jìn)制的形式。

          和字符編碼無(wú)關(guān)

          通過(guò)urlencode的轉(zhuǎn)化規(guī)則和目的,我們也很容易的看出,urleocode是基于字符編碼的。同樣的一個(gè)漢字,不同的編碼類(lèi)型,肯定對(duì)應(yīng)不同的urleocode的串。gbk編碼的有g(shù)bk的encode結(jié)果。

          apache等服務(wù)器,接受到字符串后,可以進(jìn)行decode,但是還是無(wú)法解決編碼的問(wèn)題。編碼問(wèn)題,還是需要靠約定或者字符編碼的判斷解決。

          因此,urleocode只是為了url中一些非ascii字符,可以正確無(wú)誤的被傳輸,至于使用哪種編碼,就不是eocode所關(guān)心和解決的問(wèn)題了。

          編碼問(wèn)題,不是urlencode所要解決的。
          轉(zhuǎn)自:http://apps.hi.baidu.com/share/detail/32230450

          參考資料:

          http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

          http://cn.php.net/manual/zh/function.urlencode.php

           

           

           

          posted @ 2011-08-10 13:16 donghang73 閱讀(10428) | 評(píng)論 (0)編輯 收藏

          在文件夾選項(xiàng)里改了驅(qū)動(dòng)器或文件夾的圖標(biāo),發(fā)現(xiàn)雙擊打開(kāi)硬盤(pán)變成了搜索

          解決方法:

          運(yùn)行
          regsvr32 /i shell32.dll

          解決!

          posted @ 2011-08-05 10:27 donghang73 閱讀(244) | 評(píng)論 (0)編輯 收藏
          主站蜘蛛池模板: 秦安县| 讷河市| 沙坪坝区| 香河县| 新昌县| 巴青县| 平遥县| 上饶市| 沙坪坝区| 洪雅县| 雷州市| 新化县| 连州市| 建湖县| 巴彦淖尔市| 封开县| 屏山县| 新化县| 扎兰屯市| 肇源县| 兴义市| 芜湖县| 阜新| 湖南省| 拜泉县| 蓝山县| 稷山县| 远安县| 通道| 安阳县| 桑日县| 出国| 淅川县| 屯昌县| 永仁县| 三穗县| 砚山县| 广元市| 武隆县| 虞城县| 奉新县|