PHP中文URL编解码(urlencode()rawurlencode()
PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,在编码时应该只对部分URL编码,否则URL中的冒号和反斜杠也会被转义。
详细解释:///\\\
string urlencode ( string str)
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页: 例子 1. urlencode() 示例
<?php
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>
注意:小心与 HTML 实体相匹配的变量。像 &、© 和 £ 都将被浏览器解析,并使用实际实体替代所期待的变量名。这是明显的混乱,W3C 已经告诫人们好几年了。参考地址:http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2 PHP 通过 arg_separator .ini 指令,支持将参数分割符变成 W3C 所建议的分号。不幸的是大多数用户代理并不发送分号分隔符格式的表单数据。较为简单的解决办法是使用 & 代替 & 作为分隔符。你不需要为此修改 PHP 的 arg_separator。让它仍为 &,而仅使用 htmlentities(urlencode($data)) 对你的 URL 进行编码。
例子 2. urlencode() 与 htmlentities() 示例
<?php
echo '<a href="mycgi?foo=', htmlentities(urlencode($userinput)), '">';
?>
string urlencode ( string str)
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 RFC 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。例如,如果你想在 FTP 的 URL 中包含密码:
例子 1. rawurlencode() 示例 1
<?php
echo '<a href="ftp://user:', rawurlencode('foo @+%/'),
'@ftp.my.com/x.txt">';
?>
或者,如果你想通过 URL 的 PATH_INFO 构成部分去传递信息:
例子 2. rawurlencode() 示例 2
<?php
echo '<a href="http://x.com/department_list_script/',
rawurlencode('sales and marketing/Miami'), '">';
?>
在解码时,可以使用相应的 urldecode() 和 rawurldecode(),相应地,rawurldecode() 不会把加号('+')解码为空格,而 urldecode() 可以。 下面是详细示例:
string urldecode ( string str)
解码给出的已编码字符串中的任何 %##。返回解码后的字符串。 例子 1. urldecode() example
<?php
$a = explode('&', $QUERY_STRING);
$i = 0;
while ($i < count($a)) {
$b = split('=', $a[$i]);
echo 'Value for parameter ', htmlspecialchars(urldecode($b[0])),
' is ', htmlspecialchars(urldecode($b[1])), "<br />n";
$i++;
}
?>
string rawurldecode ( string str)
返回字符串,此字符串中百分号(%)后跟两位十六进制数的序列都将被替换成原义字符。
例子 1. rawurldecode() 示例
<?php
echo rawurldecode('foo%20bar%40baz'); // foo bar@baz
?>
注意:

urldecode() 和 rawurldecode() 解码出的字符串是 UTF-8格式的编码,如果URL中含有中文的话,而页面设置又不是 UTF-8 的话,则要把解码出的字符串进行转换,才能正常显示!

还有一个问题,就是所获得的 URL 不是 %%nn n={0..F} 的格式,而是 %unnnn n={0..F} 的格式,这时候再使用 urldecode() 和 rawurldecode() 是无法正确解码的,而要可以正确解码的函数:
<?php
function utf8RawUrlDecode ($source)
{
$decodedStr = "";
$pos = 0;
$len = strlen ($source);
while ($pos < $len) {
$charAt = substr ($source, $pos, 1);
if ($charAt == '%') {
$pos++;
$charAt = substr ($source, $pos, 1);
if ($charAt == 'u') {
// we got a unicode character
$pos++;
$unicodeHexVal = substr ($source, $pos, 4);
$unicode = hexdec ($unicodeHexVal);
$entity = "". $unicode . ';';
$decodedStr .= utf8_encode ($entity);
$pos += 4;
}
else {
// we have an escaped ascii character
$hexVal = substr ($source, $pos, 2);
$decodedStr .= chr (hexdec ($hexVal));
$pos += 2;
}
} else {
$decodedStr .= $charAt;
$pos++;
}
}
return $decodedStr;

posted on 2013-08-18 12:30 snowfly123 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/linuxnotes/p/3265826.html

PHP中文URL编解码(urlencode()rawurlencode()相关推荐

  1. 常见加密解密和URL编解码

    常见加密解密和URL编解码 Base64 概念: 基于64个可打印字符,用于表示二进制数据,使用的字符包括大小写拉丁字母各26个.数字10个.加号+和斜杠/,共64个字符,等号=用来作为后缀用途 2^ ...

  2. 命令行实现URL编解码

    命令行实现URL编解码 文章目录 命令行实现URL编解码 1. 实现 2. 原理 2.1 url 的编码规则 2.2 printf 附:参考资料 1. 实现 这里的脚本在 GNU bash, vers ...

  3. MSDK手Q邀请透传参数问题:url编解码与base64编解码

    最近做MSDK手Q的邀请功能,遇到一个坑,手Q结构化消息分享功能接口如下: /*** @param scene 标识发送手Q会话或者Qzone* eQQScene.QQScene_QZone: 分享到 ...

  4. Jva编解码,加密工具类大全(Base64编解码,URL 编解码,sha56_Hmac加密,MD5对字符串进行加密,java自带类实现SHA-256方式加密)

    Base64编解码 /*** Base64编码.*/public static String encodeBase64(byte[] input) {return new String(Base64. ...

  5. javascript:URL编解码和父子窗口交互

    简单的URL编解码 URL编码使用javascript的escape实现,在后台也可用System.Web.HttpUtility.UrlEncodeUnicode()实现. 在解码时使用javasc ...

  6. 小工具发布(2008-01-25更新,HTML、URL编解码工具)

    (2008-01-25)HTML.URL编解码工具 [介绍文章][访问该工具]

  7. Base64、Unicode、URL编解码加解密

    由IFTC(工作室链接:https://shequ.codemao.cn/work_shop/10892)制作的编解码加解密的APP 下载链接:https://creation.codemao.cn/ ...

  8. URLEncoder 、URLDecoder 对 URL 编解码,HttpURLConnection 文件下载

    目录 URLEncoder  编码 URLDecoder 解码 URL 空格问题 与 HttpURLConnection 文件下载 URLEncoder  编码 1.public class URLE ...

  9. URL编解码、Big Endian和Little Endian

    一.Endian的起源 在各种计算机体系结构中,对于字节.字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特.字节.字.双字等等)应该以什么样的顺序进行 ...

最新文章

  1. 基于Sharding Sphere实现数据“一键脱敏”
  2. window,windowManager --《android 艺术探索读书》笔记
  3. SilverLight显示中文字(一)
  4. 8086汇编寄存器及指令汇总
  5. ansible---基础
  6. mac电脑LC_CTYPE: cannot change locale (UTF-8): No such file or directory
  7. C++ Traits技术
  8. MatConvnet工具箱文档翻译理解五
  9. c++/cli 之数据库操作
  10. 火狐浏览器Json插件(JSONView)
  11. 工业互联网是什么,和工业4.0对比,有什么区别?
  12. 财务数字大小写转换函数代码
  13. Thinkphp5结合layer导入excel
  14. Linux ALSA音频驱动一:音频系统概述
  15. android 投屏mac,MAC投屏ipad、手机
  16. 用了这么久开源社区,还搞不明白免费/自由/开源软件?
  17. 复变函数与积分变换---复数
  18. 炸分王的省选2021(A)游记
  19. [ZT]系统学习Linux的11点建议
  20. 康托展开(八数码问题)

热门文章

  1. 5 可隐藏的侧栏_6种隐藏式设计,不仅实用,而且更显高级!
  2. Qt 操作words实例 --- 幼儿快算题生成器
  3. python 判断时间是否大于6点_48 python判断时间是否落在两个时区之间(只比较时刻不比较日期)...
  4. CVPR 2018 FlowTrack:《End-to-end Flow Correlation Tracking with Spatial-temporal Attention》论文笔记
  5. POJ 3614-Sunscreen
  6. BZOJ 2402 陶陶的难题II (树链剖分、线段树、凸包、分数规划)
  7. 【学习笔记】Sperner定理及其证明
  8. canvas 红包雨_天猫双十一怎么买省钱?京东双十一红包口令淘宝双十一活动攻略...
  9. python实现剑指offer删除链表中重复的节点
  10. 3. nginx的请求转发算法,如何配置根据权重转发