PHP iconv函数字符串转码导致截断问题
1、iconv函数原型
string iconv ( string $in_charset , string $out_charset , string $str )
in_charset:输入的字符集
out_charset:输出的字符集
str:要转换的字符串
具体查看php手册:http://www.php.net/manual/zh/function.iconv.php
2、iconv导致字符串截断
iconv在字符编码转换时可能导致字符串截断。当$str中有一个字符不能被目标字符集所表示时,str 从第一个无效字符开始截断并导致一个 E_NOTICE。
例如:$d = iconv(“UTF-8″, “gb2312″, $c);该代码是将变量$c从UTF-8编码转换为gb2312。那么当$c中存在一个不能被gb2312表示的字符时,那么就会截断
该字符之后的内容
3、fuzz脚本
<?php
$a ="1.php";
$b =".jpg";for($i=0; $i<200; $i++){
$c = $a.chr($i).$b;
$d = iconv("UTF-8","gb2312", $c);
echo "$i ==> ".$d."n";}
可以发现当$i为128(0×80)时输出的字符串截断为1.php。为什么0×80开始截断,可以看utf8和gbk的编码范围http://www.docin.com/p-178554948.html
4、漏洞案例
http://www.wooyun.org/bugs/wooyun-2014-048293
5、注意
测试时发现在linux环境下不会截断,在windows下成功。
原文:http://hi.baidu.com/qingsh4n/item/e3c4261e045d17161994ecaa
推荐使用mb_convert_encoding 函数转换编码,函数说明参考 http://www.php.net/mb_convert_encoding
PHP iconv函数字符串转码导致截断问题的更多相关文章
- PHP iconv()函数转字符编码的问题(转)
PHP iconv()函数转字符编码的问题(转) 载自:http://www.nowamagic.net/php/php_FunctionIconv.php 在php函数库有一个函数:iconv(), ...
- php中iconv函数使用方法
最近在做一个程序,需要用到iconv函数把抓取来过的utf-8编码的页面转成gb2312, 发现只有用iconv函数把抓取过来的数据一转码数据就会无缘无故的少一些. iconv函数库能够完成各种字符集 ...
- PHP iconv函数
最近在做一个程序,需要用到iconv函数把抓取来过的utf-8编码的页面转成gb2312, 发现只有用iconv函数把抓取过来的数据一转码数据就会无缘无故的少一些. iconv函数库能够完成各种字符集 ...
- php iconv函数转换出错问题
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...
- 【转载】php中iconv函数使用方法
原文:http://www.phpweblog.net/star65225692/archive/2011/03/23/7524.html 在选择用什么工具开发,唯一的指导标准就是:用最少的人 ...
- 字符编码知识简介和iconv函数的简单使用
字符编码知识简介和iconv函数的简单使用 字符编码知识简介 我们知道,在计算机的世界其实只有0和1.期初计算机主要用于科学计算,而我们知道一个数,除了用我们常用对10进制表示,也可以用2进制表示,所 ...
- 图像分割之(四)OpenCV的GrabCut函数使用和源码解读
图像分割之(四)OpenCV的GrabCut函数使用和源码解读 分类: 图像处理 计算机视觉 2013-01-23 ...
- PHP中的mb_convert_encoding与iconv函数介绍
php传输乱码 mb_convert_encoding这个函数是用来转换编码的.原来一直对程序编码这一概念不理解,不过现在好像有点开窍了. 不过英文一般不会存在编码问题,只有中文数据才会有这个问题.比 ...
- socket 发送字符串0x00时被截断
发送数据如下: aa 02 02 00 00 00 6f 6b 02 00 00 00 55 数据是以字符数组的形式(char msg[])存储发送的,send时发送长度填写的strlen(msg), ...
随机推荐
- Qt——树的搜索
一.Qt中的树 Qt中树的实现有两种方式.第一种是使用Qt提供的QTreeWidget,很多函数都封装好,比较方便:另一种是通过QTreeView实现,设置它的数据模型,比如使用QStandardIt ...
- JAVA中获取当前系统时间
一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; public class NowStrin ...
- [CareerCup] 10.4 Find All Duplicates Elements 寻找所有的重复项
10.4 You have an array with all the numbers from 1 to N, where N is at most 32,000. The array may ha ...
- [CareerCup] 13.10 Allocate a 2D Array 分配一个二维数组
13.10 Write a function in C called my2DAlloc which allocates a two-dimensional array. Minimize the n ...
- CentOS 6.5 安装Nginx 1.7.4
一.安装准备 首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++.gcc.openssl-devel.pcre-devel和zlib ...
- WPF Command Binding
<Window x:Class="WpfTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/200 ...
- FileItem类 用法详解
FileItem类的常用方法 1.boolean isFormField().isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段,还是一个文件表单字段.如果是 ...
- 接受客户端传的inputstream类型转成string类型
public string GetReqContent() { var request = HttpContext.Current.Request; var contentStream = reque ...
- ASP.NET服务器控件使用之MultiView和View
MultiView 控件是一组 View 控件的容器.使用它可定义一组 View 控件,其中每个 View 控件都包含子控件. 用 ActiveViewIndex 属性或SetActiveView 方 ...
- c# 6.0新特性(一)
写在前面 接近年底了,基本上没什么活了,就学点新东西,就想着了解下c# 6.0的新特性.在code project上看到了一篇不错的文章,就准备翻译一下,顺便照着学习学习.废话不多说,直奔主题. 原文 ...