zoukankan      html  css  js  c++  java
  • (转载)php的urlencode()URL编码函数浅析

    (转载)http://www.jb51.net/article/27954.htm

    URLEncode的方式一般有两种,一种是传统的基于GB2312的Encode(Baidu、Yisou等使用),另一种是基于UTF-8的Encode(Google、Yahoo等使用)。

    本工具分别实现两种方式的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:

    <?php 
    //GB2312的Encode 
    echo urlencode("中文-_. ")."\n"; //%D6%D0%CE%C4-_.+ 
    echo urldecode("%D6%D0%CE%C4-_. ")."\n"; //中文-_. 
    echo rawurlencode("中文-_. ")."\n"; //%D6%D0%CE%C4-_.%20 
    echo rawurldecode("%D6%D0%CE%C4-_. ")."\n"; //中文-_. 
    ?> 

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

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

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

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

    二、使用mb_convert_encoding函数:

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

    实例:

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

    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


    例子:

    <?PHP
    $url = 'http://s.jb51.net/中文.rar';
    echo urlencode($url).'<br>';
    echo rawurlencode($url).'<br>';
    echo '<br>';
    
    // urlencode()函数与rawurlencode()函数在空格的处理上面变现不同
    $url2 = 'http://s.jb51.net/ 中 文.rar';
    echo urlencode($url2).'<br>';
    echo rawurlencode($url2).'<br>';
    echo '<br>';
    
    // 使用gb2312进行编码,可以发现gb2312和utf-8在处理中文的时候编码不同,而英文相同
    echo urlencode(mb_convert_encoding($url2, 'gb2312', 'utf-8')).'<br>';
    echo rawurlencode(mb_convert_encoding($url2, 'gb2312', 'utf-8')).'<br>';
    ?>

    程序输出:

    http%3A%2F%2Fs.jb51.net%2F%E4%B8%AD%E6%96%87.rar
    http%3A%2F%2Fs.jb51.net%2F%E4%B8%AD%E6%96%87.rar
    
    http%3A%2F%2Fs.jb51.net%2F+%E4%B8%AD+%E6%96%87.rar
    http%3A%2F%2Fs.jb51.net%2F%20%E4%B8%AD%20%E6%96%87.rar
    
    http%3A%2F%2Fs.jb51.net%2F+%D6%D0+%CE%C4.rar
    http%3A%2F%2Fs.jb51.net%2F%20%D6%D0%20%CE%C4.rar
  • 相关阅读:
    父子进程 signal 出现 Interrupted system call 问题
    一个测试文章
    《淘宝客户端 for Android》项目实战 html webkit android css3
    Django 中的 ForeignKey ContentType GenericForeignKey 对应的数据库结构
    coreseek 出现段错误和Unigram dictionary load Error 新情况(Gentoo)
    一个 PAM dbus 例子
    漫画统计学 T分数
    解决 paramiko 安装问题 Unable to find vcvarsall.bat
    20141202
    js
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3132534.html
Copyright © 2011-2022 走看看