zoukankan      html  css  js  c++  java
  • php中urlencode()和urldecode()URL编码函数浅析[转]

    URLEncode:是指针对网页url中的中文字符的一种编码转化方式,最常见的就是Baidu、Google等搜索引擎中输入中文查询时候,生成经过Encode过的网页URL。
    URLEncode的方式一般有两种,一种是传统的基于GB2312的Encode(Baidu、Yisou等使用),另一种是基于UTF-8的Encode(Google、Yahoo等使用)。

    URLdecode:就是将url编码后的字符串还原成未编码的样子。


    本工具分别实现两种方式的Encode与Decode:

    中文 -> GB2312的Encode -> %D6%D0%CE%C4

    中文 -> UTF-8的Encode -> %E4%B8%AD%E6%96%87

    Html中的URLEncode:

    编码为GB2312的html文件中:http://s.jb51.net/中文.rar -> 浏览器自动转换为 -> http://s.jb51.net/%D6%D0%CE%C4.rar

    注意:Firefox对GB2312的Encode的中文URL支持不好,因为它默认是UTF-8编码发送URL的,但是ftp://协议可以,我试过了,我认为这应该算是Firefox一个bug。

    编码为UTF-8的html文件中:http://s.jb51.net/中文.rar -> 浏览器自动转换为 -> http://s.jb51.net/%E4%B8%AD%E6%96%87.rar

    PHP中的URLEncode:
    复制代码 代码如下:

    1 <?php
    2 //GB2312的Encode
    3 echo urlencode("中文-_. ")."
    "; //%D6%D0%CE%C4-_.+
    4 echo urldecode("%D6%D0%CE%C4-_. ")."
    "; //中文-_.
    5 echo rawurlencode("中文-_. ")."
    "; //%D6%D0%CE%C4-_.%20
    6 echo rawurldecode("%D6%D0%CE%C4-_. ")."
    "; //中文-_.
    7 ?>

    除了“-_.”之外的所有非字母数字字符都将被替换成百分号“%”后跟两位十六进制数。

    urlencode和rawurlencode的区别:urlencode将空格编码为加号“+”,rawurlencode将空格编码为加号“%20”。

    如果要使用UTF-8的Encode,有两种方法:

    一、将文件存为UTF-8文件,直接使用urlencode、rawurlencode即可。

    二、使用mb_convert_encoding函数:
    复制代码 代码如下:

    1 <?php
    2 $url = 'http://s.jb51.net/中文.rar';
    3 echo urlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."
    ";
    4 echo rawurlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."
    ";
    5 //http%3A%2F%2Fs.jb51.net%2F%E4%B8%AD%E6%96%87.rar
    6 ?>


    实例:
    复制代码 代码如下:

     1 <?php
     2 function parseurl($url="")
     3 {
     4 $url = rawurlencode(mb_convert_encoding($url, 'gb2312', 'utf-8'));
     5 $a = array("%3A", "%2F", "%40");
     6 $b = array(":", "/", "@");
     7 $url = str_replace($a, $b, $url);
     8 return $url;
     9 }
    10 $url="ftp://ud03:password@s.jb51.net/中文/中文.rar";
    11 echo parseurl($url);
    12 //ftp://ud03:password@s.jb51.net/%D6%D0%CE%C4/%D6%D0%CE%C4.rar
    13 ?>


    JavaScript中的URLEncode:

    如:%E4%B8%AD%E6%96%87-_.%20%E4%B8%AD%E6%96%87-_.%20

    encodeURI不对下列字符进行编码:“:”、“/”、“;”、“?”、“@”等特殊字符。

    如:http://s.jb51.net/%E4%B8%AD%E6%96%87.rarhttp%3A%2F%2Fs.jb51.net%2F%E4%B8%AD%E6%96%87.rar

  • 相关阅读:
    【leetcode】1630. Arithmetic Subarrays
    【leetcode】1629. Slowest Key
    【leetcode】1624. Largest Substring Between Two Equal Characters
    【leetcode】1620. Coordinate With Maximum Network Quality
    【leetcode】1619. Mean of Array After Removing Some Elements
    【leetcode】1609. Even Odd Tree
    【leetcode】1608. Special Array With X Elements Greater Than or Equal X
    【leetcode】1603. Design Parking System
    【leetcode】1598. Crawler Log Folder
    Java基础加强总结(三)——代理(Proxy)Java实现Ip代理池
  • 原文地址:https://www.cnblogs.com/wpclw/p/6141793.html
Copyright © 2011-2022 走看看