首页 > 编程技术 > php

php上传文件中文文件名乱码

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

可能会有不少朋友碰到一些问题就是上传文件时如果是英文倒好原文名不会有问题,如果是中文可能就会出现乱码了,今天我来给大家总结一下导致乱码php上传文件中文文件名乱码的原因与解决办法吧。

这几天在windows下安装了XAMPP,准备初步学习一下php的相关内容。这几天接触到了php上传文件,但是出现了一个郁闷问题,我准备上传一个excel文件,但是如果文件名是中文名就会报错。

一来二去很是郁闷,后来仔细想了想应该是文件编码的问题,我写的php文件使用的是UTF-8编码,如果没有猜错APACHE处理用的应该是GBK(当然现在我无法确定,希望高手给与指教)。想明白了这个问题,就去查找相关的教程了,索性找到了iconv这个函数。

函数原型:string iconv ( string in_charset, string out_charset, string str )

使用例子:$content = iconv(”GBK”, “UTF-8″, $content);

这个例子的作用就是将$content从GBK转换成UTF-8编码。

乱码问题关键代码:

 代码如下 复制代码

$name=iconv("UTF-8","gb2312", $name);

move_uploaded_file($tmpname, $this->final_file_path);      

$name=iconv("gb2312","UTF-8", $name);

除了这样来解决上传文件中文乱码问题,我们还可以把上传文件重新命名即可。

$sFileName = "sda.php";
$sOriginalFileName = $sFileName;
$sExtension = s str($sFileName, (strrpos($sFileName, '.') + 1));//找到扩展名
$sExtension = strtolower($sExtension);
$sFileName = date("YmdHis").rand(100, 200).".".$sExtension; //这样就是我们的新文件名了,全数字的不会有乱码了哦。

php连接数据库很简单但我们在插入保存数据到mysql数据库时如果不统一页面与数据库编码就可能出现中文乱码问题,下面我来给大家介绍预止此问题发生方法。

php中关于mysql的操作非常简单,然而最近在做一个小工具的时候发现php写入mysql的数据库中出现了中文字符的乱码,这个乱码的问题纠结了我好久,明明英文字符写入正常,但是中文就是乱码!

一开始我感觉是我建立mysql数据库的时候没有设置UTF-8字符集,然而后来我发现即使我设置了这个字符集还是不能解决问题,写入mysql的字符串照样乱码。

解决这个问题其实很简单.

1.在建表的时候设置编码类型为gb2312_chinese_ci.

2.在PHP页面的数据库连接语句加一行mysql_query("SET NAMES 'gb2312'",$link); 例如

 代码如下 复制代码

$db_host="localhost";
$db_user="root";
$db_password="password";
$db_name="test";

$link=mysql_connect($db_host,$db_user,$db_password);
mysql_query("SET NAMES 'gb2312'",$link);
$db=mysql_select_db($db_name,$link);
$query="select * from user";
$result=mysql_query($query);

写入页面和读取页面都加入这行.这样在MYSQL里面的中文就能正常显示了.


另外种办法修改配置文件my.cnf

 代码如下 复制代码

[mysqld]

default-character-set=utf8

重新启动MYSQL改过 这个改了就是把 character_set_server    设成utf8


好了到这些关于php写入mysql中文乱码问题就解决了,当然我们主要是注意页面与数据库之间的编码然后使用mysql_query()进行设置。

可能有不少用户会发现自己的ecshop经常会使用关就超时了,这个问题解决办法有很多种,我们可以直接在ecsho中进行修改,具体方法如下

在includescls_session.php中修改

 代码如下 复制代码

var $max_life_time = 1440;

// SESSION 过期时间、单位秒这段代码中的数字。此数字单位为秒,前台登录和后台登陆都是调用这里设置的时间。

2 关于在后台编辑产品经常由于时间长而超时,可以在登录的时候,勾起“请保存我这次登录信息”就可以不提示超时了,或者直接修改admintemplateslogin.html,,让页面默认选中这一项!现在的新版本,对安全打高了一些,几乎是5分钟没有操作后台就重新登陆,有没有办法可以改掉因为只有3分钟,所以我们往往在录入过程中就超时了,所以我们需要增加超时时间。

修改方法如下:

includes/init.php
api/init.php
admin/includes/init.php
wap/includes/init.php

将以上这几个文件中,找到下面的代码

 代码如下 复制代码

@ini_set(’session.cache_expire’, 180);//单位秒

当然除了上面方法我们还可以修改php配置文件来操作了

继续PHP中的Session话题,在PHP中主要通过设置session.gc_maxlifetime来设定Session的生存周期。例如:

 代码如下 复制代码

    <?php
    ini_set('session.gc_maxlifetime', 3600); //设置时间
    ini_get('session.gc_maxlifetime');//得到ini中设定值
    ?>

下面提供一个别人封装好的函数,但是我没有测试过,仅供参考:

 代码如下 复制代码

    <?php
    function start_session($expire = 0)
    {
    if ($expire == 0) {
    $expire = ini_get('session.gc_maxlifetime');
    } else {
    ini_set('session.gc_maxlifetime', $expire);
    }
    
    if (empty($_COOKIE['PHPSESSID'])) {
    session_set_cookie_params($expire);
    session_start();
    } else {
    session_start();
    setcookie('PHPSESSID', session_id(), time() + $expire);
    }
    }
    ?>

使用方法:

    加入start_session(600);//600秒以后过期。

今天发现一个很怪的事情自己在mac装MAMP环境phpMyAdmin没有创建数据库这个选项了,这个是本地安装又不是空间怎么会没有这个创建数据库权限呢,带的疑问我们一起来看看怎么回事吧。

在Windows平台上有很多PHP环境一键安装包,在OS X里只发现2个。一个XAMPP,一个MAMP。前者发现不支持Zend,我估计会导致一些程序不兼容,而后者就没这些问题。当然OS X里也自带环境,不过要装MySQL和phpMyAdmin,所以我就打算搞一键安装包算了。

在官网下载后安装免费版的MAMP,装好后进入phpMyAdmin,发现没有创建数据库选项。搜了国内很多教程,他们的截图跟我的截图不一样。google去搜国外phpmyadmin create database的文章,同样无果。卸载重装收费版的MAMP PRO,同样没有创建数据库。

之后无意中搜到一个视频,里面是一个老外在演示mac里装MAMP的步骤教程。几分钟看完后,发现他点出来的phpMyAdmin也是有创建数据库的,这就奇怪了。仔细看了下,他用的是MAMP 1.9.2,而我在官网下载的是最新版MAMP 2.2,官方只提供这个版本和MAMP 1.9.6.1,所以继续搜索MAMP 1.9.2的安装包。终于发现一个网站里有所有版本的安装包,找到1.9.2下载安装,跟视频教程里一模一样,点开phpMyAdmin,终于有创建数据库了。

我不确定官网提供的MAMP 1.9.6.1是否也可以,大家可以试试,然后给我反馈。我看了下MAMP 1.9.2的基本配置,里面的版本应该足够我用的了,所以暂时不需要升级到很高的版本。装了个最新版WordPress,居然支持伪静态,cool!

搞了半下午加半晚上,终于解决了,希望对大家有用。不过不知道是不是运行PHP环境的原因,我的Air掉电明显比之前快很多。

可能有很多朋友在本地使用phpmyadmin时过了下会发现又需要重新登录了,这个很不方便下面我来介绍修改phpMyAdmin默认登录超时方法。

phpMyAdmin的默认超时时间是1800秒,太短了开发过程中写几行代码回来一看数据库就超时了,反复登录很烦人。

修改方法:

打开phpMyAdmin/libraries/config.default.php 
 

 代码如下 复制代码
找到$cfg['LoginCookieValidity'] = 1440;

行把1440调大一些就ok了

标签:[!--infotagslink--]

您可能感兴趣的文章: