首页 > 编程技术 > php

PHP中文URL编解码详细说明

发布时间:2016-11-25 17:40

,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--]

您可能感兴趣的文章: