php urlencode()函数实现URL编码解析

 更新时间:2016年11月25日 17:38  点击:2262
在php中urlencode()函数函数是把中文转换成字符串编码,这样就不会导致中文url在浏览器中打开乱码或出错的问题了,下面我来给大家介绍在使用 urlencode()编码是一些具体细节。

urlencode
(PHP 4, PHP 5)

urlencode — 编码 URL 字符串

Report a bug 说明
string urlencode ( string $str )
此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。

Report a bug 参数

str
要编码的字符串。

Report a bug 返回值

返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。

么是URLEncode:

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

中文 -> GB2312的Encode -> %D6%D0%CE%C4
中文 -> UTF-8的Encode -> %E4%B8%AD%E6%96%87

Html中的URLEncode:
编码为GB2312的html文件中,
/中文.rar -> 浏览器自动转换为 -> /%D6%D0%CE%C4.rar
注意:Firefox对GB2312的Encode的中文URL支持不好,因为它默认是UTF-8编码发送URL的,但是ftp://协议可以,我试过了.我认为这应该算是Firefox一个bug.

编码为UTF-8的html文件中,
/中文.rar -> 浏览器自动转换为 -> /%E4%B8%AD%E6%96%87.rar

PHP中的URLEncode:

 代码如下 复制代码

//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函数。

 代码如下 复制代码

$url = ‘/中文.rar’;
echo urlencode(mb_convert_encoding($url, ‘utf-8′, ‘gb2312′)).”n”;
echo rawurlencode(mb_convert_encoding($url, ‘utf-8′, ‘gb2312′)).”n”;
//http%3A%2F%2Fud03.kinoko.name%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://ud03:password@ud03.kinoko.name/中文/中文.rar”;
echo parseurl($url);
//ftp://ud03:password@ud03.kinoko.name/%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 不对下列字符进行编码:“:”、“/”、“;”、“?”、“@”等特殊字符。

 代码如下 复制代码

/%E4%B8%AD%E6%96%87.rarhttp%3A%2F%2Fud03.kinoko.name%2F%E4%B8%AD%E6%96%87.rar


Note:

注意:小心与 HTML 实体相匹配的变量。像 &amp、&copy 和 &pound 都将被浏览器解析,并使用实际实体替代所期待的变量名。这是明显的混乱,W3C 已经告诫人们好几年了。参考地址:» http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2。

PHP 通过 arg_separator.ini 指令,支持将参数分割符变成 W3C 所建议的分号。不幸的是大多数用户代理并不发送分号分隔符格式的表单数据。较为简单的解决办法是使用 & 代替 & 作为分隔符。你不需要为此修改 PHP 的 arg_separator。让它仍为 &,而仅使用 htmlentities() 或 htmlspecialchars() 对你的 URL 进行编码。

出现这种问题是你的include路径不对了,如果是cms可能是你的系统环境没配置好,下面我来介绍此问题的两种解决方案。

以下是Discuz的一个报错。

Fatal error: require_once() [function.require]: Failed opening required './source/class/class_core.php' (include_path='.;c:php5pear') in D:webBBSindex.php on line 14

解决办法

修改php.ini配置文件。

 代码如下 复制代码

; Windows: "path1;path2"
;include_path = ".;c:phpincludes"
改为:
; Windows: "path1;path2"
include_path = "c:phpincludes"

如果你使用的是iis可能就权限配置问题了,我们可尝试按下面方法解决

为了行文方便,我先说下我的目录结构

1、  D:FreeHost为网站根目录,在它的下面放置DZ论坛、wordpress博客和织梦门户网站;

2、  以dz论坛举例,D:FreeHostwebdz2013_JD3QC6,这是dz程序的根目录,里面放置的是dz程序。

A、 我的网站刚开始如这样设置的,administrators和system对网站根目录FreeHos具有完全的控制权限。

B、 webdz2013_JD3QC6程序根目录的设置权限是:administrators 完全,system完全,iis来宾账户IUSR_dzusr 读取和运行、列出文件目录和读取,network service 完全控制权限且不是继承父目录的。

结果论坛的最后一步出现上面的错误。

解决方法如下

A、 对网站根目录FreeHos“只有该文件夹”添加iis来宾账户IUSR_dzusr的读权限

今天在运行dedecms时出现有些页面会提示Fatal Error: Allowed memory size of 123456789 bytes exhausted了,下面我来给大家介绍如何解决些问题。

错误提示

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 3214636 bytes) in E:VertrigoServwwwinstall.php on line 488

我们直接创建一个phpinfo.php文件,写入如下代码

<?php phpinfo(); ?>

然后就可以查看到你的内存

php内存分配不足:

1、修改php.ini(推荐)   

 代码如下 复制代码
memory_limit = 12M (改大点) 

 
2、在程序里面添加如下语句   

运行时修改php的内存设置

在你的php代码中增加以下命令行即可。

 代码如下 复制代码

<?php

ini_set('memory_limit','128M');

?>

  

3、在根目录建立.htaccess文件,添加如下内容   

 代码如下 复制代码

php_value max_execution_time 1200
php_value memory_limit 200M
php_value post_max_size 200M
php_value upload_max_filesize 200M

memory_limit应该设为多少?

这个完全依赖于你的应用的要求。比如Wordpress,运行起核心代码需要32MB。Drupal 6则要求这个值最小为16MB,并推荐设置为32MB。如果你又安装不少的插件(plugins),尤其是那些要进行图像处理的模块,那么你可能需要 128MB或更高的内存。

今天在使用php中strstr函数时提示Warning:strstr()[function.strstr]:Empty delimiter错误了,后来经过反复查找得出解决办法,有需要的同学可参考。

Warning: strstr() [function.strstr]: Empty delimiter

非常奇怪,难道php函数strstr的某个参数出问题了?

于是写了个测试的例子

 代码如下 复制代码

<?php

$text=”asdfghjklqwertyuiopzxcvbnm”;
//$key=”g”;

//根据php错误提示Empty delimiter,判断应该不会是$text的值出问题,所以故意注释了key值

if(strstr($text, $key)){
echo “found it”;
}else{
echo “not found”;
}

?>

strstr()竟然不报错,于是想到$key值可能会是空串”",姑且一试。

果然strstr($text,”")时,提示出错Warning: strstr() [function.strstr]: Empty delimiter

今天在利用empty函数是出现Fatal error: Can’t use function return value in write context错误提示,觉得很怪, 这个函数我可是使用了N久了今天怎么回事,下面大家来看看我的分析过程。

错误提示

Fatal error: Can’t use function return value in write context in empty.php on line 5

我代码是这样写的

 代码如下 复制代码

$str=” “;
if(empty(trim($str))){
echo “empty”;
}

然后出现了

Fatal error: Can’t use function return value in write context in empty.php on line 5

看不出原因就上了官网查看了一下手册。

bool empty ( mixed $var )

如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,”"、0、”0″、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。 除了当变量没有置值时不产生警告之外,empty() 是 (boolean) var 的反义词。

可见empty只能用来检查变量值,不能用来检查函数的返回值。正确用法应该是

 代码如下 复制代码

$var =trim(” “);
// 结果为 true,因为 $var 为空字符串
if (empty($var)) {
echo ‘empty’;
}

empty(trim($str)这种用法是错误的。

[!--infotagslink--]

相关文章

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

    下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20
  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中json_decode()和json_encode()用法与中文不显示解决办法

    本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
  • PHP json_encode() 函数详解及中文乱码问题

    在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数值转换成json数据存储格式。<&#63;php$arr = array ( 'Name'=>'希亚', 'Age'...2015-11-08
  • SQL Server中row_number函数的常见用法示例详解

    这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • PHP加密解密函数详解

    分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30