您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“php中文傳到后臺(tái)亂碼的解決方法”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“php中文傳到后臺(tái)亂碼的解決方法”這篇文章吧。
php中文傳到后臺(tái)亂碼的解決辦法:1、使用“iconv('UTF-8', 'GB2312//IGNORE', $targetFile);”;2、使用“move_uploaded_file($tempFile, $targetFile);”。
本文操作環(huán)境:Windows7系統(tǒng),PHP7.1版,Dell G3電腦。
php文件上傳后臺(tái)存儲(chǔ)中文亂碼問題解決方案:
php文件上傳后臺(tái)處理講解:
用戶上傳文件后(前端我用的是uploadify2.3),我希望按照它原有的文件名保存(有時(shí)是中文),只用php的move_uploaded_file命令會(huì)出現(xiàn)亂碼(我是ubuntu的服務(wù)器)。需要先用icotargetFile=iconv(′UTF?8′,′GB2312//IGNORE′,targetFile);不加IGNORE的話iconv會(huì)對(duì)— (橫杠)這一字符轉(zhuǎn)換失敗,并且后面自動(dòng)截?cái)唷@纾?/p>
iconv('UTF-8', 'GB2312//IGNORE', "博客—yet"); // 輸出"博客yet" iconv('UTF-8', 'GB2312//IGNORE', "博客—yet"); // 輸出"博客"
所以正確的存儲(chǔ)方法是:
$targetFile = iconv('UTF-8', 'GB2312//IGNORE', $targetFile); // UTF8轉(zhuǎn)GB2312 move_uploaded_file($tempFile, $targetFile); // 服務(wù)器把文件暫時(shí)放在$tempFile
因?yàn)檗D(zhuǎn)碼會(huì)損失字符,我們需要將新文件名保存,為了確定到底那些字符丟失,我使用了這樣來回轉(zhuǎn)換的trick:
$targetFile = iconv('GB2312', 'UTF-8//IGNORE', $targetFile );
php文件下載后臺(tái)處理講解:
其中何時(shí)使用GB2312,何時(shí)UTF8很重要。
此外ob_clean()和flush()是下載來的文件是否亂碼的關(guān)鍵
<?php $ROOT = $_SERVER["DOCUMENT_ROOT"]; // 獲取根路徑 $filename = $_GET["filename"]; // GET方式拿到文件名 $filepath = $ROOT.$filename; // 文件路徑UFT8版 $filepath_iconv = iconv('UTF-8', 'GB2312//IGNORE', $ROOT.$filename); // 文件路徑GB2312版 if (is_file($filepath_iconv)) // 和上面一樣,php的文件系統(tǒng)函數(shù)的輸入一定要GB2312字符,否則is_file返回false { $fileinfo = pathinfo($filepath); // 返回給客戶端的用UFT8 header('Content-type: application/x-'.$fileinfo['extension']); header('Content-Disposition: attachment; filename='.$fileinfo['basename']); header('Content-Length: '.filesize($filepath_iconv)); // GB2312才能訪問文件 ob_clean(); // 如果不加這兩句的話,下載下來的文件是亂碼的 flush(); // 如果不加這兩句的話,下載下來的文件是亂碼的 readfile($filepath_iconv); // GB2312才能訪問文件 exit(); } else { die("文件不存在或已被刪除"); } ?>
下面是我搭配uploadify 2.3使用的文件上傳后端文件,僅供參考:
<?php error_reporting(0); // 如果需要開啟php警告,刪除此句 if (!empty($_FILES)) { $my_articleDBtable = $_GET["my_articleDBtable"]; require_once("../../init.php"); // $tmpimgUploadDir在這個(gè)文件里 $tempFile = $_FILES['Filedata']['tmp_name']; $originalName = $_FILES['Filedata']['name']; if (empty($tempFile)) { die("抱歉,由于服務(wù)器原因,文件上傳失敗"); } $dateYmd = date("Ymd",strtotime("now")); $targetPath = $ROOT.$attachmentDir.$dateYmd.'/'; //存儲(chǔ)文件夾(絕對(duì)路徑) mkdir($targetPath, 0777, true); $new_dir_name = new_name($_FILES['Filedata']['name']); //將文件名md5加密,僅保留最后一個(gè)后綴 mkdir($targetPath.$new_dir_name, 0777, true); $targetFile = $targetPath.$new_dir_name.'/'.$originalName; //移動(dòng)tmp文件到指定位置,并防止中文文件名亂碼。(tmp文件是服務(wù)器自動(dòng)生成的) move_uploaded_file($tempFile, iconv('UTF-8', 'GB2312//IGNORE', $targetFile)); $originalName = iconv('UTF-8', 'GB2312//IGNORE', $originalName); $originalName = iconv('GB2312', 'UTF-8//IGNORE', $originalName); //返回文件地址 $filename = $originalName; $href = $ROOTTOSERVER.$attachmentDir.$dateYmd.'/'.$new_dir_name.'/'.$originalName; $filename = mysql_real_escape_string($filename); $href = mysql_real_escape_string($href); mysql_query("insert into `$my_articleDBtable` (articleName, articleContent) VALUES ('$filename','$href')") or die(mysql_error()); die("success"); } function new_name($filename){ $ret = array(); $ext = pathinfo($filename); $ext = $ext['extension']; $ext = strtolower($ext); if ($ext=='doc'|| $ext=='docx') { $name = basename($filename,$ext); $name = md5($name.time()); //.'.'.$ext; return $name; } die("文件名不合法"); } ?>
以上是“php中文傳到后臺(tái)亂碼的解決方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。