在php中碰到乱码多半是编码问题了,在这里我们分析了很久得出了下面fgetcsv读取csv文件乱码原因所在与解决办法。

例子

代码如下

复制代码

function get_csv_contents( $file_target ){

$handle  = fopen( $file_target, 'r');

while ($data = fgetcsv($handle, 1000, ",")) {

$num = count($data);

echo "

$num fields in line $row:
n";

$row++;

for ($c=0; $c < $num; $c++) {

echo $data[$c]. "
n";;

/*echo getUTFString($data[$c])*/

}

}

fclose($handle);

}

导入的csv文件是以ansi编码保存的,对于中文操作系统环境对应的应该就是gbk编码了,通过手动更改浏览器字符编码为gbk,乱码的情况消失了,于时进行了下面调整。

代码如下

复制代码

$data = eval(‘return ‘.iconv(‘gbk’,'utf-8′,var_export($data,true)).’;');

$data为需要转换编码的数组。

补充:LINUX FGETCSV读取GBK数据乱码

当Linux系统是使用的默认设置,则在该Linux服务器上对gbk的csv格式文件进行处理的时候,就会出现乱码现象。

解决方法是:

使用 setlocale 函数设置环境变量。比如要设置使用gb 的区域设置可以在fgetcsv前使用下面的语句。

代码如下

复制代码

setlocale(LC_ALL,array('zh_CN.gbk','zh_CN.gb2312','zh_CN.gb18030'));

具体使用哪些locale 可以使用linux 命令 locale -a 查看系统支持哪些

curl来抓取网页内容是一个性能比较好的函数了,我们通常会使用它来快速模仿用户去访问我们要抓取的网页了,下面看一个例子有兴趣的朋友可进入参考。

早上想写了一个抓取是京东618魅族专题页的抓取,然后想着自动下单购买,尼玛,算了,太多了,写到判断是否开始了,商品价格进行了变化,后边工程量有点大就懒的写了,如果要完善的话就需要写模拟登陆(这个不难)加入购物车,下单,下单的时候判断一下价格,如果价格个官方优惠价格相同就下单,不同就接着去抓。算了,懒的写了。下边是部分代码

代码如下

复制代码

$cookie_file = dirname(__FILE__)."/jd.cookie";

//专题首页url

$indexurl = 'http://sale.jd.com/act/BOxFsKPGNZwpet4.html';

//获取专题页到产品详情的地址

$indexstr = get($indexurl);

//var_dump($indexstr);exit;

preg_match_all('/

$tmp = pathinfo($data[1][0]);

$pinfo['id'] = $tmp['filename'];

$pinfo['url'] = $data[1][0];

unset($tmp,$data);

$pinfo = getPrice($pinfo['id']);

if($pinfo['mainproduct']['price'] == 1799){

addcar();

}else{

echo "还没有开始抢购";

}

function get($url,$flag=true){

global $cookie_file;

$headerArray = array(

"content-type: application/x-www-form-urlencoded;charset=UTF-8",

);

//echo $cookie_file;exit;

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch,CURLOPT_USERAGENT,'"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0"');

curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);//设置头信息

curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie_file);

curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);

$return = curl_exec($ch);

curl_close($ch);

if($flag)$return = gzdecode($return);

return $return;

}

function getPrice($id){

$priceUrl = "http://rs.jd.com/accessorie/newServiceWhite.jsonp?sku=".$id;

$data = json_decode(get($priceUrl,false),true);

return $data;

}

function addcar(){

global $pinfo;

$addurl = "http://gate.jd.com/InitCart.aspx?pid=".$pinfo['mainproduct']['sku']."&pcount=1&ptype=1";

echo get($addurl,false);

}

php 在curl抓取的时候出现乱码

用站长工具查看我们抓取的网而不是使用了gzip压缩了,如果有返回"Accept-Encoding:gzip, deflate" 就是打开了gzip了,我们只要如下操作

代码如下

复制代码

$res=curl_exec($ch1);

if(!empty($res)){ //save capcha

echo gzdecode($res);

}

GBK或者UTF8汉字之类的乱码

代码如下

复制代码

mb_convert_encoding($str, 'utf-8', 'GBK,UTF-8,ASCII');就行了

我们设置页面为GBK兼容GB2312,GB2312是GBK的子集,所有GB2312编码的用GBK都能正确解出来

日历程序代码我们一般会使用一些js插件来实现了,但是像博客这种日志分类我们会使用php程序来实现,下面一聚教程小编就来为你介绍一下吧。

PHP日历程序,功能都是大众化的,可以下拉切换年月,上一年下一月下一年上一月,太另类的没去写,主要的写出来了,扩展起来就方便多了,标题为什么要叫精美呢,是因自已感觉界面还过得去,哈哈,让大家见笑了,不足之处还请指出。

效果代码如下

php日历核心代码

代码如下

复制代码

//日历类

class calendar {

//当前的年

private $year;

//当前的月

private $month;

//一个月中第一天是星期几

private $start_weekday;

//当前月的天数

private $days;

//最大数与最小年数,最大与最小月数

private $yearMonth = array(2080, 1900, 12, 1);

//构造函数

function __construct() {

if (isset($_GET['year'])) {

$this->year = $_GET['year'];

}

if (isset($_GET['month'])) {

$this->month = $_GET['month'];

}

$this->pnYm($this->year, $this->month);

$this->days = date('t', mktime(0, 0, 0, $this->month, 1, $this->year));

$this->start_weekday = date('w', mktime(0, 0, 0, $this->month, 1, $this->year));

$this->style();

}

//输出

private function style() {

echo '

$this->weeklist();

$this->daylist();

echo '

}

//年月参数判断

private function ymCheck($year, $month) {

if (!is_numeric($year)) {

$year = date('Y');

}

if (!is_numeric($month)) {

$month = date('m');

}

if ($month < $this->yearMonth[3]) {

$month = $this->yearMonth[2];

$year -= 1;

}

if ($month > $this->yearMonth[2]) {

$month = $this->yearMonth[3];

$year = intval($year) + 1;

}

$year = $year < $this->yearMonth[1] ? $this->yearMonth[1] : $year;

$year = $year > $this->yearMonth[0] ? $this->yearMonth[0] : $year;

return array($year, $month);

}

//上一年、下一年、上一月、下一月

private function pnYm($year, $month) {

$ym = $this->ymCheck($year, $month);

$this->year = $ym[0];

$this->month = $ym[1];

}

//weeklist周列表

private function weeklist() {

$week = array('日','一','二','三','四','五','六');

echo '

';

foreach ($week as $val) {

echo '

'.$val.'';

}

echo '

';

}

//daylist天列表

private function daylist() {

//年月日导航

echo '

';

echo '

<<';

echo '

<';

echo '

';

echo '

';

echo '';

for ($i = $this->yearMonth[1]; $i <= $this->yearMonth[0]; $i++) {

if ($i == $this->year) {

echo ''.$i.'年';

}else {

echo ''.$i.'年';

}

}

echo '';

echo '';

for ($i = $this->yearMonth[3]; $i <= $this->yearMonth[2]; $i++) {

if ($i == $this->month) {

echo ''.$i.'月';

}else {

echo ''.$i.'月';

}

}

echo '

';

echo '

>';

echo '

>>';

echo '

';

echo '

';

//输出空格(当前一个月第一天前面要空出来的)

for($i = 0; $i < $this->start_weekday; $i++) {

echo '

';

}

for ($k = 1; $k <= $this->days; $k++) {

$i++;

if ($k == date('d')) {

echo '

'.$k.'';

}else {

echo '

'.$k.'';

}

if ($i % 7 == 0) {

if ($k != $this->days) {

echo '

';

}

}

}

echo '

';

}

}

?>

html+css代码

代码如下

复制代码

PHP日历程序

#calendar { width:auto; margin:0 auto; margin-top:100px; border:0; border-collapse:collapse; box-shadow:0px 0px 4px #ddd; font-size:12px; text-align:center; font-family:"微软雅黑"; color:#333; border:solid 1px #c5e2ff; }

#calendar tr { width:auto; height:34px; line-height:34px; }

#calendar tr th { width:44px; background:#c5e2ff; }

#calendar tr td { background:#fff; }

#calendar tr td.tdbg { background:#c5e2ff; }

#calendar tr td:hover { background:#FFC; }

#calendar tr td a { text-decoration:none; color:#f50; font-weight:900; }

#calendar select { width:auto; border:solid 1px #c5c5c5; padding:2px 0 2px 0; background:#fff; float:left; margin-left:5px; }

function formaction() {

var form = document.getElementById('form');

form.submit();

}

require 'init.php';

$calendar = new calendar();

?>

unlink在php中是删除文件如果单文件删除我们直接使用unlink就可以了,如果是目录中的删除我们需要遍历目录进入递归操作删除了,下面来看一个例子。

在学习本方法之前我们最rmdir();函数,这个函数就是根据指定的文件路劲,删除文件或者是文件夹,但是当删除的是文件夹,并且文件夹里面还有内容的时候,就会出现Directory not empty 的错误,这个怎么来解决呢,现在我们就通过编写一个函数来解决这个问题。

在本实例中使用到了php中比较重要的几个文件操作的函数,

1.opendir:如果该函数成功运行,将返回一组目录流(一组目录字符串),如果失败将返回错误[error]。你可以在函数的最前面加上“@”来隐藏错误。

2.readdir:从目录留里面里面的返回的结果是,首先是一个.(表示这个目录,进入目录开始读取),返回..(表示已经在目录中,正在读取目录中的文件)   然后返回文件或者文件夹的名字,如果没有则返回false

3.closedir:关闭目录流

完整代码:

代码如下

复制代码

Insert title here

function delDirAndFile($dirName,$flag) {

if (@$handle = opendir ( "$dirName" )) {

//如果该函数成功运行,将返回一组目录流(一组目录字符串),如果失败将返回错误[error]。你可以在函数的最前面加上“@”来隐藏错误。

while ( false!==($item = readdir($handle))) {

//从目录留里面里面的返回的结果是,首先是一个.(表示这个目录,进入目录开始读取),返回..(表示已经在目录中,正在读取目录中的文件)

//然后返回文件或者文件夹的名字,如果没有则返回false

if ($item!= "." && $item != "..") {

//这里是当有文件或者是文件夹的时候开始做出判断

if (is_dir("$dirName/$item" )) {

//如果是文件夹,递归都用

delDirAndFile("$dirName/$item");

} else {

//否则就删除文件

if (unlink ( "$dirName/$item" ))

//判断文件是不是删除成功了

echo "删除文件 $dirName/$itemn";

}

}

}

closedir ($handle );//关闭文件目录流

if($flag==true){

if (rmdir($dirName ))

echo '目录以及文件删除成功';//最后删除输入的文件夹

}

}

}

?>

delDirAndFile("dd",false);

?>

代码的基本介绍在代码中都有说明,现在我们来看看测试的结果:

执行前的文件结构目录

执行时页面显示结果:

执行之后的问价目录结构:

下面有两种方法实现用户登录了,一个是无数据库直接登录功能,一个是有数据库查询判断登录,后者是我们最常用的管理权限与后台登录功能,希望对各位有帮助哦。

用户登录系统(没数据库)

关键的代码:

在loginUI.php中主要是:

——————————————————————————–

代码如下

复制代码

if(error!=null){

$error=$_GET['error'];

echo $error;

echo “登陆失败,请检查您的用户名(yugaga)和密码(123456)”;

}

?>

————————————————————————————

就是在登录失败之后显示一些提示信息

在loginCheck.php中

————————————————————————————–

代码如下

复制代码

$username=$_POST['username'];

$password=$_POST['password'];

if($username==”yugaga”&&$password==”123456″){

$host  = $_SERVER['HTTP_HOST'];

$uri   = rtrim(dirname($_SERVER['PHP_SELF']), ‘/’);

$extra = ‘welcome.php?user=’.$username;

header(“Location: http://$host$uri/$extra“);

}else {

$host  = $_SERVER['HTTP_HOST'];

$uri   = rtrim(dirname($_SERVER['PHP_SELF']), ‘/’);

$extra = ‘loginUI.php?error=failer’;

header(“Location: http://$host$uri/$extra“);

}

?>

———————————————————————————————————-

主要是对提交的信息进行验证,这里面用到了正则匹配,和全局变量

在welcome.php中,主要输出信息

———————————————————————————————————-

代码如下

复制代码

$username=$_GET['user'];

echo “欢迎”.$username.”的登陆”;

?>

用户登录系统(有数据库)

我们试着去连接数据库。主要是增添加了两个文件,一个SqlHepler.php,用来获得数据库的连接,一个userService.php文件,用来处理和用户相关的操作,比如用户登录的验证,在本次中,我们只是添加了一个函数checkUserLogin($username,$password),根据用户名和密码判断用户是不是登录成功!~

html 代码

代码如下

复制代码

简单的登陆演示

用户账号:

用户秘密:

$error=$_GET['error'];

if($error=='failer'){

echo "登陆失败,请检查您的用户名(yugaga)和密码(123456)";

}

?>

主要代码:

——————————————————————————————————-

include_once ‘SqlHelper.php’;

function checkUserLogin($username,$password){

$res=mysql_query(“select *from users where username=’”.$username.”‘”);

if(($listuser=mysql_fetch_array($res))!=null){

if($listuser[2]==$password){

return true;

}

}else {

return false;

}

}

?>

————————————————————————————————————-

SqlHelper的代码:

————————————————————————————————————

$server=”localhost”;

$user=”root”;

$pass=””;

$con=mysql_connect($server,$user,$pass);

mysql_select_db(“login”,$con);

?>

————————————————

登录成功之后代码

$username=$_GET['user'];

echo "欢迎".$username."的登陆";

?>

php获取csv文件乱码,php使用fgetcsv读取csv文件乱码解决方法相关推荐

  1. ajax上传文件 获取失败,Ajax上传文件/照片时报错TypeError :Illegal invocation的解决方法...

    本篇文章给大家带来的内容是关于Ajax上传文件/照片时报错TypeError :Illegal invocation的解决方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 问题 A ...

  2. html js 读取资源文件,使用HTML5和JQuery读取CSV(Text)文件的实例

    本文介绍使用HTML5和JQuery读取CSV(Text)文件的简单实例. CSV文件内容如图: CSV文件 Text文件内容如图(逗号分隔的文本文件): Text文件 使用HTML5和JQuery读 ...

  3. python怎么读取csv的一部分数据_python批量读取csv文件 如何用python将csv文件中的数据读取成数组...

    如何用python把多个csv文件数据处理后汇总到新csv文件你看这月光多温柔,小编转头还能看见你,一切从未坍塌. 可以用pandas读取数据,首先把文件方同一个文件价里,然后对当前文件价的所有内容循 ...

  4. php 读取解析excel文件内容,怎么用PHP读取Excel文件信息及内容?(图文+视频教程)...

    本篇文章将要给大家详细介绍如何用PHP读取Excel文件数据及内容信息. 在文章开始介绍前,大家需要了解一下PHPExcel是什么?PHPExcel 就是一个用来操作Office Excel 文档的P ...

  5. python读取txt文件为dataframe,python批量读取txt文件为DataFrame

    我们有时候会批量处理同一个文件夹下的文件,并且希望读取到一个文件里面便于我们计算操作.比方我有下图一系列的txt文件,我该如何把它们写入一个txt文件中并且读取为DataFrame格式呢? 首先我们要 ...

  6. 电子邮件乱码产生的主要原因及几种解决方法

    关于电子邮件乱码 --转摘自中国科学院,作者不详     本文主要介绍邮件乱码产生的主要原因及几种解决方法: E-mail编码标准 由于一个汉字是用两个扩展 ASCII码表示,对DOS.Windows ...

  7. python读取txt文件的行数_python读取txt文件符合条件的行数-女性时尚流行美容健康娱乐mv-ida网...

    女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页 > 高级搜索 python 关系网图 pyth ...

  8. unknown error mysql_mysql执行sql文件报错Error: Unknown storage engine‘InnoDB’的解决方法...

    发现问题 最近在工作中遇到一个问题,在运行了一个innoDB类型的sql文件,报了Error: Unknown storage engine 'InnoDB'错误,网上查了很多方法,但是都没办法真正解 ...

  9. html文件打开系统错误,win7打开word提示“无法打开文件Normal因为内容有错误”的两种解决方法...

    win7系统打开Word的时候,弹出提示"无法打开文件Normal.dotm,因为内容有错误",为什么会出现错误提示呢?小编就按照错误提示寻找文件,最后发现是Word自动生成的模板 ...

  10. windows下安装phpcms html/ 文件夹不可写的一种错误以及解决方法

    windows下安装phpcms html/ 文件夹不可写的一种错误以及解决方法 参考文章: (1)windows下安装phpcms html/ 文件夹不可写的一种错误以及解决方法 (2)https: ...

最新文章

  1. hp服务器ilo批量配置脚本
  2. c语言求阶乘和的流程图_C/C++编程笔记:C语言 rand() 随机函数,深入解析程序随机数!...
  3. 大数据分析中国冬季重度雾霾的成因(二)
  4. boost::process::windows相关的测试程序
  5. 基于Boost::beast模块的无栈协程WebSocket服务器
  6. 软件开发工程师证书有用吗_监理工程师证书有用吗?有没有含金量?
  7. Interceptor的用法以及和Filter的区别
  8. DOM事件学习之兼容中文输入法
  9. 计算机网络课程设计 学校园网设计
  10. vivado基本知识
  11. 计算机 64虚拟内存设置方法,计算机虚拟内存怎样设置
  12. 7月26日 select单表查询基础语句
  13. 2012第27周移动APP推荐
  14. Python爬虫实战:抓取淘宝MM照片
  15. oppo a36参数配置
  16. 图像基本操作——图像边界填充和图像融合
  17. 开源OA协同办公平台使用教程:O2OA如何集成yozo
  18. mybatispuls 如何通过时间进行范围查询
  19. 图书-励志-羊皮卷:《羊皮卷》
  20. 国产浏览器的创新之路,拼的就是用户体验

热门文章

  1. [华为] 华为交换机接口配置报错指南
  2. 2022秋招 华为硬件工程师-单板硬件开发面经
  3. [网络应用]Foobar2000界面入门:认识Foobar的UI系统,熟悉三种主流界面插件
  4. C#listview控件
  5. 易语言取CPU序列号特征字
  6. 编码表(ASCII码GB2312gbkunicodeUTF-8)
  7. Flink 异步IO
  8. 基于Jersey框架创建web项目
  9. 《实用软件工程》课程教学大纲(Practicality Software Engineering)
  10. Java web 实现视频在线播放的常用几种方法