php urlencode 中文编码

在PHP中有urlencode()、urldecode()、rawurlencode()、rawurldecode()这些函数来解决网页URL编码解码问题。

在ASP的时候URL编码解码很是恼火,Server.urlencode不太好用,遇到utf-8编码的地址更是麻烦。你要获取百度、Google点击到网站的网址链接中的关键字,要写上一堆自定义函数来得到urldecode的效果。

摘录一篇关于PHP urlencode()函数的文章,对PHP处理URL作全面了解,文章来自373ren排行13,感谢。

理解urlencode:

urlencode:是指针对网页url中的中文字符的一种编码转化方式,最常见的就是Baidu、Google等搜索引擎中输入中文查询时候,生成经过 Encode过的网页URL。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://www.fufuok.com/中文.rar -> 浏览器自动转换为 -> http://www.fufuok.com/%D6%D0%CE%C4.rar
注意:Firefox对GB2312的Encode的中文URL支持不好,因为它默认是utf-8编码发送URL的,但是ftp://协议可以,应该算是Firefox一个bug。

编码为utf-8的html文件中:
http://www.fufuok.com/中文.rar -> 浏览器自动转换为 -> http://www.fufuok.com/%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://www.fufuok.com/中文.rar';
echo urlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."\n";
echo rawurlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."\n";
//http%3A%2F%2Fwww.fufuok.com%2F%E4%B8%AD%E6%96%87.rar
?>

应用实例:

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://fufu:password@www.fufuok.com/中文/中文.rar";
echo parseurl($url);
//ftp://fufu:password@www.fufuok.com/%D6%D0%CE%C4/%D6%D0%CE%C4.rar

时间: 2024-11-02 02:50:50

php urlencode 中文编码的相关文章

php urlencode中文编码与urlencode语法

str urlencode($string) 此功能是方便的编码字符串时要在URL的查询的一部分用来作为一种方便的方法传递变量到下一页. 我写了这个简单的函数,创建一个GET查询的网址()从一个数组: */ function encode_array($args) {   if(!is_array($args)) return false;   $c = 0;   $out = '';   foreach($args as $name => $value)   {     if($c++ !=

php json中文编码为null的解决办法_php技巧

今天使用json_encode函数,发现中文竟成了null. 原因分析:使用json_encode函数应应使用utf-8编码,我的页面用的是gbk. 解决:在json_encode函数前使用iconv('gbk','utf8')函数.函数 function gbk2utf8($data) { if(is_array($data)) { return array_map('gbk2utf8', $data); } return iconv('gbk','utf-8',$data); } //以下是

(虽然是转的,很希望给大家看)分析中文编码问题

简介  编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中经常遇到的几种编码格式的区别:Java 中经常需要编码的场景:出现中文问题的原因分析:在开发 Java web 程序时可能会存在编码的几个地方,一个 HTTP 请求怎么控制编码格式?如何避免出现中文问题?   为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?

使用Curl进行抓取远程内容时url中文编码问题

PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,在编码时应该只对部分URL编码,否则URL中的冒号和反斜杠也会被转义.下面是详细解释:     1 string urlencode( string str) 返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+).   例子 1 :urle

asp和asp.net中Server.UrlEncode

ASP.net中的Server.UrlEncode函数和ASP中的Server.URLEncode函数返回的值不一样. 试验代码: ASP.net 中:Response.Write(Server.UrlEncode("汇编"));返回:%e6%b1%87%e7%bc%96 ASP       中:Response.Write Server.URLEncode("汇编") 返回:%BB%E3%B1%E0 产生这个问题的原因:     ASP.net 中的 Server

utf-8转gb2312以及urlencode函数(精典源码)

函数|utf-8|gb2312|urlencode 在网上提供了很多urlencode相关的函数,但问题很多,还有UTF-8转GB2312或GB2312转UTF-8的函数也是问题多多,下面提供的通用函数非常好用,建议收藏,在处理中文参数时很有用. 源码如下: <% ----------------------------------- 'utf-8 -> gb2312 '----------------------------------- function UTF2GB(UTFStr) UT

UrlEncode函数 for javascript

function UrlEncode(str){    var ret="";    var strSpecial="!\"#$%&'()*+,/:;<=>?[]^`{|}~%";    for(var i=0;i<str.length;i++){    var chr = str.charAt(i);      var c=str2asc(chr);      if(parseInt("0x"+c) >

Js中实现拼音和UrlEncode的功能(利用GB和Unicode对照表)

encode|js|拼音 经常用vb写的urlencoding很容易实现UrlEncode,以及利用http://www.csdn.net/Develop/read_article.asp?id=13846中的代码很容易改写成vbs从而实现部分汉字的拼音 但由于有些人需要完全用javascript写,而javascript默认是Unicode所以就需要一个Unicode和GB的转换库 Unicode和GB的转换库和UrlEncode和getSpell函数,请下载http://www.blueid

JS(Unicode-&amp;gt;GB)的精简版(仍含拼音和UrlEncode)

encode|js|拼音 http://www.csdn.net/Develop/read_article.asp?id=15043用的Unicode和GB的转换库如下地址http://www.blueidea.com/user/qswh/qswhU2GB.js148k的js,本地测试没有问题,但搁到网上就会觉得有点慢了 所以需要一个精简版,采录的只是GB2312编码,即部分GBK,但够用即可这次特别精简了代码,但功能不变,区别只是该版只能作用于常见汉字.什么马配什么鞍,也修改了UrlEncod