php中url地址栏传参数汉语乱码消释方式汇总,U
分类:pc28.am

很多朋友说JavaScript的decodeURI函数也可以实现,但有bug所有呢,下面看下下面的函数,经过测试使用暂时没什么问题,我在之前的文章说过,这个和php的urldecode函数根本不是一回事。下面是我根据高人的代码改写的JavaScript版的urldecode函数,参考的链接在开头提到的文章中有,就不一一列举了。和之前的urlencode函数一样,只实现了utf-8版的。

复制代码 代码如下:

在使用 ?id=”中文” 传递中文参数时,出现了乱码,这是经过了二次转码后的结果,其中,在 php 中,url 中是不可以直接传输中文的,对于这点,一直心存不满,没办法呀,谁让咱没一套解决方案呢,不知道别的语言是不是也出现这样的问题。

php中url地址栏传参数中文乱码解决方法汇总

1、urlencode

<?php
$url = "//www.jb51.net";
echo urlencode($url); //输出编码后的字符串
?>

对于网上所说的在首页添加 header(“content-type:text/html;charset=utf-8″); 这样的代码,以及把数据库页面等等设置成 utf8 的解决方案根本无效,始终传递过来的中文是乱码。

php地址栏传中文$_GET下来后乱码,urlencode和urldecode用法详解
url编码
语法: string urlencode(string str);
返回值: 字符串
函数种类: 编码处理
例如:

使用方法: urlencode;

复制代码 代码如下:

尽管所有 04ie.com站点PHP  我都是用的统一的 utf8 编码,但始终传递过去是乱码,后来测试了几个浏览器,发现 360 可以传递过去,而 IE 不行,后来再使用 $msg = iconv(‘gbk’,'utf-8′,$_GET["msg"]); 进行转换,测试几个浏览器后,大多还是显示乱码的问题。

复制代码 代码如下:

function urlencode {var output = '';var x = 0;clearString = utf16to8(clearString.toString;var regex = //;while (x < clearString.length) {var match = regex.exec);if (match != null && match.length > 1 && match[1] != '') {output  = match[1];x  = match[1].length;} else {if (clearString[x] == ' ')output  = ' ';else {var charCode = clearString.charCodeAt;var hexVal = charCode.toString;output  = '%'   ( hexVal.length < 2 ? '0' : '' )   hexVal.toUpperCase();}x  ;}}function utf16to8 {var out, i, len, c;out = "";len = str.length;for {c = str.charCodeAt &&  {out  = str.charAt;} else if  {out  = String.fromCharCode & 0x0F));out  = String.fromCharCode & 0x3F));out  = String.fromCharCode & 0x3F));} else {out  = String.fromCharCode & 0x1F));out  = String.fromCharCode & 0x3F));}}return out;}return output;}

<?php
$url = "//www.jb51.net";
$newurl = urlencode($url); //首先对$url进行编码
echo urldecode($newurl); //输出解码后的字符串
?>

最后总结了一点,对于 GET[] 过去的值,url 中不可以直接传输中文,如果必须要传输的话,用 urlencode() 方法来处理中文。对于 POST[]  不知道怎么样,暂时还没有做过实验。

<?php
$ChineseName="我的名字,是中文的哦";
$EncodeStr=urlencode($ChineseName);
echo "<a href=/cgi/personal.cgi?name=$EncodeStr>我的名字</a>";
?>

2、urldecode

您可能感兴趣的文章:

  • PHP curl实现抓取302跳转后页面的示例
  • PHP获取当前页面URL函数实例
  • php获取当前页面完整URL地址
  • PHP获取当前页面完整URL的实现代码
  • php通过隐藏表单控件获取到前两个页面的url
  • php 伪造HTTP_REFERER页面URL来源的三种方法
  • PHP中使用cURL实现Get和Post请求的方法
  • php的urlencode()URL编码函数浅析
  • php获取当前网址url并替换参数或网址的方法
  • PHP获取当前页面完整URL的方法

再来PHP手册上查下urlencode()的使用:

url解码
还原 URL 编码字符串。
语法: string urldecode(string str);
返回值: 字符串
函数种类: 编码处理
例如:
对前面传过来的中文进行处理显示

使用方法:urldecode;

urlencode() 本函数将字符串以 URL 编码。例如空格就会变成加号。Homepage 中 form 资料传送就是用 urlencode 编码后再送出

复制代码 代码如下:

function urldecode{var output = encodedString;var binVal, thisString;var myregexp = //;function utf8to16{var out, i, len, c;var char2, char3;out = "";len = str.length;i = 0;while {c = str.charCodeAt{ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:out  = str.charAt;break;case 12: case 13:char2 = str.charCodeAt;out  = String.fromCharCode | ;break;case 14:char2 = str.charCodeAt;char3 = str.charCodeAt;out  = String.fromCharCode | |;break;}}return out;}while((match = myregexp.exec != null&& match.length > 1&& match[1] != ''){binVal = parseInt,16);thisString = String.fromCharCode;output = output.replace;}//output = utf8to16;output = output.replace;output = utf8to16;return output;}

原来如此,我说呢为什么从form表单提交过来的就没有问题,但是url传递过来的就乱码

<?php
$DecodeStr=urldecode($_GET['name']);//你可能不用解码都可以,因为浏览器会自动帮你解码
echo $DecodeStr;
?>

当服务器端通过php的urlencode转码的就可以使用js的urldecode进行解析即可。

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

 

中文 -> GB2312的Encode ->

本文由pc28.am发布于pc28.am,转载请注明出处:php中url地址栏传参数汉语乱码消释方式汇总,U

上一篇:详解各种获取元素宽高及位置的属性,scroll的属 下一篇:没有了
猜你喜欢
热门排行
精彩图文