• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      PHP+MySQL網(wǎng)站中關(guān)于上傳中文文件名照片亂碼問(wèn)題的探討

      2017-09-15 12:46:09
      福建質(zhì)量管理 2017年13期
      關(guān)鍵詞:字符集亂碼文件名

      (衡陽(yáng)技師學(xué)院 湖南 衡南 421101)

      PHP+MySQL網(wǎng)站中關(guān)于上傳中文文件名照片亂碼問(wèn)題的探討

      李彩云

      (衡陽(yáng)技師學(xué)院湖南衡南421101)

      PHP+MySQL網(wǎng)站中上傳、縮放、顯示含中文文件名照片時(shí)亂碼問(wèn)題的解決方法。

      PHP+MySQL網(wǎng)站;中文文件名照片;上傳;縮放;顯示;亂碼;解決

      做網(wǎng)站的朋友,做信息處理系統(tǒng)的朋友,在做之前大抵都會(huì)思考一個(gè)基礎(chǔ)性問(wèn)題,選用什么字符集。筆者近期使用PHP+Mysql在做一個(gè)B/S的信息處理系統(tǒng),頁(yè)面使用utf-8字符集,后臺(tái)mysql數(shù)據(jù)庫(kù)使用的也是utf8字符集,操作系統(tǒng)是gbk字符集,用戶在上傳并縮放含中文命名的照片文件到系統(tǒng)時(shí),總是存在亂碼問(wèn)題,下面是筆者對(duì)這一問(wèn)題的一些不成熟的解決方法,總結(jié)出來(lái),以期拋磚引玉。

      一、關(guān)于網(wǎng)站和mysql數(shù)據(jù)庫(kù)常用中文字符集

      據(jù)統(tǒng)計(jì)當(dāng)前主流網(wǎng)站使用的字符集主要有utf-8和gb2312,下表是統(tǒng)計(jì)結(jié)果。

      各網(wǎng)站所用字符集

      從這個(gè)統(tǒng)計(jì)可以看出,當(dāng)前主流中文網(wǎng)站很多都使用gb2312字符集,它們或許是早期設(shè)計(jì)時(shí)考慮gb2312編碼更方便吧。

      而使用過(guò)mysql數(shù)據(jù)庫(kù)的朋友都清楚,它的字符集很豐富,存儲(chǔ)處理中文為主的信息時(shí),我們一般選擇gb2312或utf8,而使用繁體字的臺(tái)灣地區(qū)可使用big5。Gb2312存儲(chǔ)一個(gè)中文漢字占兩個(gè)字節(jié),而utf8存儲(chǔ)一個(gè)中文漢字要三個(gè)字節(jié)。mysql服務(wù)器默認(rèn)使用latin1字符集,這是支持西歐語(yǔ)系的,我們中國(guó)人一般會(huì)設(shè)置為utf8或gb2312,當(dāng)主要是處理中文信息時(shí),采用gb2312可節(jié)省存儲(chǔ)空間,幫數(shù)據(jù)庫(kù)瘦身。

      二、在上傳縮放含中文文件名的照片時(shí),字符集不一致導(dǎo)致的問(wèn)題及解決方法

      1.頁(yè)面使用gb2312,后臺(tái)mysql數(shù)據(jù)庫(kù)使用gb2312字符集,GBK的操作系統(tǒng)

      頁(yè)面、后臺(tái)mysl數(shù)據(jù)庫(kù)如果都用gb2312,我們的操作系統(tǒng)是gbk,則不管是照片上傳到服務(wù)器的文件系統(tǒng)中,還是存儲(chǔ)到數(shù)據(jù)庫(kù)中都不會(huì)出現(xiàn)亂碼問(wèn)題,再?gòu)臄?shù)據(jù)庫(kù)中調(diào)回到頁(yè)面也不會(huì)出現(xiàn)不顯示的問(wèn)題,正是皆大歡喜呀!

      A、從gb2312的頁(yè)面上傳照片到gbk的服務(wù)器上

      move_uploaded_file(myphoto['tmp_name'],fpath);

      B、在gb2312頁(yè)面縮放照片文件

      pinfo=getimagesize(fpath);//取得照片文件的尺寸信息

      src=imagecreatefromjpeg(fpath);//取得照片文件的圖像資源

      imagejpeg(dst,fname);//將取出的圖像資源輸出到文件

      C、將包含照片信息的記錄存儲(chǔ)到數(shù)據(jù)庫(kù)的表中,輸出到gb2312的頁(yè)面,都不需轉(zhuǎn)換。

      insstr=“insert into xs set學(xué)號(hào)='stuNumber',姓名='stuName',照片='fname'”;

      res=mysqli_query(link,insstr);//將包含照片文件信息的記錄插入到數(shù)據(jù)庫(kù)的表中。

      2.頁(yè)面使用utf-8,后臺(tái)mysql數(shù)據(jù)庫(kù)使用utf8字符集,GBK的操作系統(tǒng)

      頁(yè)面使用utf-8、數(shù)據(jù)庫(kù)使用utf8、數(shù)據(jù)庫(kù)連接使用utf8、操作系統(tǒng)是GBK,使用PHP語(yǔ)言上傳并縮放含中文名稱的照片后,存放到服務(wù)器的文件夾中,顯示的照片文件名是亂碼,數(shù)據(jù)庫(kù)中存儲(chǔ)的路徑?jīng)]問(wèn)題,但在頁(yè)面瀏覽數(shù)據(jù)時(shí),照片不能正常顯示。頁(yè)面使用utf-8,數(shù)據(jù)庫(kù)和連接使用utf8,是標(biāo)配,理應(yīng)沒(méi)問(wèn)題的,但因?yàn)槲覀兪褂弥形牟僮飨到y(tǒng),文件系統(tǒng)的字符集是GBK,還是存在字符集不一致的問(wèn)題,所以只要與文件系統(tǒng)有數(shù)據(jù)傳輸,就會(huì)出問(wèn)題。

      要解決這一問(wèn)題,可以使用PHP中的iconv()函數(shù),該函數(shù)能將字符串或文件由一種字符集轉(zhuǎn)化為另一種字符集。如iconv(“gb2312”,”utf-8”,str)的功能是將字符串str的字符集由gb2312轉(zhuǎn)化為utf-8。

      A、上傳照片文件時(shí),加iconv()函數(shù),使它的字符集由utf-8轉(zhuǎn)化為gb2312,上傳到服務(wù)器文件夾中時(shí),中文文件名的照片文件的文件名不會(huì)出現(xiàn)亂碼。

      move_uploaded_file(myphoto['tmp_name'],iconv(“utf-8”,“gb2312”,fpath));

      B、縮放照片時(shí),凡是用到照片文件的都使用iconv()函數(shù)轉(zhuǎn)換,將從文件系統(tǒng)導(dǎo)出的gb2312數(shù)據(jù)流與頁(yè)面的使用的字符集utf-8不沖突。

      pinfo=getimagesize(iconv(“utf-8”,“gb2312”,fpath));//取得照片文件的尺寸信息

      src=imagecreatefromjpeg(iconv(“utf-8”,“gb2312”,fpath));//取得照片文件的圖像信息

      imagejpeg(dst,iconv(“utf-8”,“gb2312”,fname));//將取出的圖像資源輸出到文件

      C、將包含照片信息的記錄存儲(chǔ)到utf8的數(shù)據(jù)庫(kù)的表中,輸出到utf-8的頁(yè)面,與gb2312字符集一樣,都不需轉(zhuǎn)換。

      而如果頁(yè)面、連接都使用uft8,數(shù)據(jù)庫(kù)使用gb2312,操作系統(tǒng)是GBK,上傳并縮放含中文名稱的照片后,存儲(chǔ)到數(shù)據(jù)庫(kù)的表中時(shí)要將utf-8轉(zhuǎn)換為gb2312,輸出到頁(yè)面時(shí),又要將gb2312轉(zhuǎn)換成utf-8。

      sinfo['照片']);?>”>//將包含照片信息的記錄在utf-8的頁(yè)面顯示。

      綜上所述,不管頁(yè)面、數(shù)據(jù)庫(kù)使用什么字符集,在上傳、縮放、存儲(chǔ)、顯示含中文文件名的照片到數(shù)據(jù)庫(kù)、到頁(yè)面時(shí),如果有亂碼問(wèn)題,我們都可以考慮使用PHP提供的iconv()進(jìn)行轉(zhuǎn)換這種方法來(lái)解決。

      [1]鄭阿奇主編.MySQL實(shí)用教程.電子工業(yè)出版社.2017年7月.

      [2]唐俊主編.PHP+MySQL網(wǎng)站開發(fā)技術(shù)項(xiàng)目式教程.人民郵電出版社.2015年7月.

      猜你喜歡
      字符集亂碼文件名
      這些真的不是亂碼,是漢字
      MySQL數(shù)據(jù)庫(kù)字符集的問(wèn)題研究
      右鍵調(diào)用多重更名更方便
      Excel輕松提取文件名
      ORACLE字符集問(wèn)題的分析
      ORACLE數(shù)據(jù)庫(kù)字符集問(wèn)題及解決方法
      醫(yī)院信息系統(tǒng)Oracle數(shù)據(jù)庫(kù)中導(dǎo)入數(shù)據(jù)中文亂碼的解決技術(shù)
      炫邁:用神奇亂碼勾引你視線
      不讓長(zhǎng)文件名成為“絆腳石”
      電腦迷(2014年8期)2014-04-29 07:37:40
      如何解決Tomcat的亂碼
      安徽省| 哈密市| 莱西市| 铁岭县| 黎川县| 桃源县| 宜都市| 涟源市| 青阳县| 鄂伦春自治旗| 米泉市| 永和县| 建始县| 玉门市| 乃东县| 安远县| 兴山县| 广汉市| 沾益县| 满洲里市| 巴马| 上饶县| 吉水县| 黔西县| 进贤县| 临夏市| 广德县| 香河县| 那曲县| 兰西县| 庆阳市| 黄骅市| 山丹县| 邓州市| 浪卡子县| 朝阳区| 白朗县| 博兴县| 古田县| 桂阳县| 桃江县|