PHP中文URL编解码详细说明

 更新时间:2016年11月25日 17:40  点击:1791
,urldecode() 和 rawurldecode() 解码出的字符串是 UTF-8格式的编码,如果URL中含有中文的话,而页面设置又不是 UTF-8 的话,则要把解码出的字符串进行转换,才能正常显示

在php中urlencode和rawurlencode 是对中文进行编码的
string urlencode ( string str)
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 rfc 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 url 定界符,同时保护 url 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱

*/

$a ='?a=中文';
$urlencode =urlencode($a);
echo $urlencode; //%3fa%3d%d6%d0%ce%c4


/*
string rawurldecode ( string str)
返回字符串,此字符串中百分号(%)后跟两位十六进制数的序列都将被替换成原义字符。
*/

$c = rawurlencode($urlencode);///a%253d%25d6%25d0%25ce%25c4;
echo $c;


/*

在php中编码转换函数常用的有mb_convert_encoding与iconv两个函数,两个函数的区别在于,后者执行效率比mb_convert_encoding快速很多,iconv在转换字符\"—\"到gb2312时会出错,如果没有ignore参数,

所有该字符后面的字符串都无法被保存。不管怎么样,这个"—"都无法转换成功,无法输出。另外mb_convert_encoding没有这个bug.
  */

header("content-type: text/html; charset=utf-8");
echo mb_convert_encoding("你是我的友仔", "utf-8", "gbk");

//gbk to gb2312

 

header("content-type: text/html; charset=big5");
echo mb_convert_encoding("你是我的朋友", "big5", "gb2312");

 

$content = iconv("gbk", "utf-8", $content);
$content = mb_convert_encoding($content, "utf-8", "gbk");

/*


一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数.

花絮:如果你不知道你当前字符编码可以使用mb_detect_encoding来检测你字符编码哦

相关文件请查看
http://www.111cn.net/phper/php-cy/36263.htm

我是这样做的,确定mssql是正常的用户名密码也可以,但下面就是不行。

<?php教程 
$con=mssql_connect( "localhost", "sa ", "123456 ") or die ('error'); 
 
?> 

错误提示
 warning: mssql_connect() [function.mssql-connect]: unable to connect to server: $sa in d:php2.php on line 11
error

下面来看一下我的解决方法吧,
系统是:
win2003+mssql2000+php5.23

实现方法

php目录下有没有ntwdblib.dll有没有这个文件?ntwdblib.dll是客户连接库,如果有查看一下版本号是多少,一般会是7.0的,这个只能与mssq 7.0进行连接,我们为了能与我们现数据库教程版本相同就把mssql下的ntwdblib.dll拷贝到你php 所在的目录替换那个7.0的,重起iis就ok了


插曲,如果你的mssql连接有问题可利用php自带了函数 mssql_get_last_message(),来取得错误信息哦。

用iconv函数:

iconv( "utf-8", "gb2312" , "abc阳光123");

据说这样好些,可以忽略转换时的错误!

iconv( "utf-8", "gb2312//ignore" , "abc阳光123");

mb_convert_encoding的用法见官方:
http://cn.php教程.net/manual/zh/function.mb-convert-encoding.php

做一个gbk to utf-8

< ?php
header("content-type: text/html; charset=utf-8");
echo mb_convert_encoding("我的友仔", "utf-8", "gbk");
?>

再来个gb2312 to big5

< ?php
header("content-type: text/html; charset=big5");
echo mb_convert_encoding("你是我的朋友", "big5", "gb2312");
?>


不过要使用上面的函数需要安装但是需要先enable mbstring 扩展库。

php中的另外一个函数iconv也是用来转换字符串编码的,与上函数功能相似。

下面还有一些详细的例子:
iconv — convert string to requested character encoding
(php 4 >= 4.0.5, php 5)
mb_convert_encoding — convert character encoding
(php 4 >= 4.0.6, php 5)

用法:
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉
mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;

开始时经常会碰到如下提示

warning: session_start() [function.session-start]: cannot send session cache limiter - headers already sent (output started at e:php教程www.111cn.netadmin.php:1) in e:phpwww.111cn.netlogolistadminlogo.php on line 2

这是提供session前面己经有输出了,我们只要把session_start()放在最前面,同时最了为避免出错提供可以在前面加@,如@session_start();这样就可以了。

同时也可以在php.ini中修改session.auto_start = 0 为 session.auto_start = 1

就可以了。

 

[!--infotagslink--]

相关文章

  • js URLdecode()与urlencode方法支持中文解码

    下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20
  • 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。首先:用show variables like “%colla%”;show varables like “%char%”;这两条...2015-11-24
  • C#读取中文文件出现乱码的解决方法

    这篇文章主要介绍了C#读取中文文件出现乱码的解决方法,涉及C#中文编码的操作技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • Mysql在debian系统中不能插入中文的终极解决方案

    在debian环境下,彻底解决mysql无法插入和显示中文的问题Linux下Mysql插入中文显示乱码解决方案mysql -uroot -p 回车输入密码进入mysql查看状态如下:默认的是客户端和服务器都用了latin1,所以会乱码。解决方案:mysql>use...2013-10-04
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
  • Python 利用base64库 解码本地txt文本字符串

    这篇文章主要介绍了Python 利用base64库 解码本地txt文本字符串的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-09
  • Java连接数据库oracle中文乱码解决方案

    这篇文章主要介绍了Java连接数据库oracle中文乱码解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-16
  • FlashFXP连接站点中文显示乱码解决办法

    FlashFXP是一款常用的服务器客户连接软件了,我们可以通过FlashFXP来上传或下载文件,但有一些朋友使用FlashFXP时碰到中文目录或文件名乱码问题,那么要如何来解决呢?具体就...2016-10-10
  • php中把unicode编码转化为中文

    小编在网上看到最多的就是汉字转换unicode编码了,今天我们看到一个反过来的操作就是把unicode转换成中文了,下面一起来看看 这两天帮别人开发微信平台好友板块,存...2016-11-25
  • php 判断是否是中文/英文/数字示例代码

    复制代码 代码如下: $str='asb天水市12'; if (preg_match("/^[/x7f-/xff]+$/", $str)){ echo '全部是汉字'; }else { echo '不全是汉字'; } /** PHP自带的判断是否是中文, eregi('[^/x00-/x7F]', $str ) //中文 ereg...2013-10-04
  • php中文转换成拼音代码

    <?php教程 function cn2pinyin($_string, $_code='gb2312') { $_datakey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|b...2016-11-25
  • JavaScript过滤字符串中的中文与空格方法汇总

    这篇文章主要介绍了JavaScript过滤字符串中的中文与空格方法汇总 的相关资料,需要的朋友可以参考下...2016-03-09
  • three.js显示中文字体与tween应用详析

    这篇文章主要给大家介绍了关于three.js显示中文字体与tween应用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-04
  • php 根据啊拉伯数字转变成大写中文数字

    // 原是是根据用户输入的数字判断再转换成想要的大写数字,如果我们先把大小写存在一个数组,再判断进行转换就OK了。 $data = $_POST['rmb']; if (!ereg("^[0-9.]",$dat...2016-11-25
  • PHP把16进制的编码转为中文程序代码

    今天在做公司的项目的时候,遇到一个问题,群聊天记录存入数据库的时候把聊天记录及央视使用16进制转换,我在做将聊天记录导出为text文本的时候,需要将聊天记录先从16进制转...2016-11-25
  • 如何正确统计中文字数?

    PHP代码:-------------------------------------------------------------------------------- function ccStrLen($str) #计算中英文混合字符串的长度 { $ccLe...2016-11-25
  • 深度解析MySQL 5.7之中文全文检索

    InnoDB默认的全文索引parser非常合适于Latin,因为Latin是通过空格来分词的。但对于像中文,日文和韩文来说,没有这样的分隔符。一个词可以由多个字来组成,所以我们需要用不同的方式来处理。在MySQL 5.7.6中我们能使用一个新的全文索引插件来处理它们:n-gram parser。...2017-01-09
  • JS验证逗号隔开可以是中文字母数字

    这篇文章主要介绍了JS验证逗号隔开可以是中文字母数字 的相关资料,需要的朋友可以参考下...2016-04-24