>  기사  >  백엔드 개발  >  PHP 중국어가 잘못된 문자와 함께 배경으로 전송되면 어떻게 해야 합니까?

PHP 중국어가 잘못된 문자와 함께 배경으로 전송되면 어떻게 해야 합니까?

藏色散人
藏色散人원래의
2021-12-21 09:59:271799검색

PHP에서 배경으로 전송된 잘못된 문자에 대한 해결 방법: 1. "iconv('UTF-8', 'GB2312//IGNORE', $targetFile);"을 사용합니다. 2. "move_uploaded_file($tempFile, $targetFile) );

PHP 중국어가 잘못된 문자와 함께 배경으로 전송되면 어떻게 해야 합니까?

이 문서의 운영 환경: Windows 7 시스템, PHP 버전 7.1, Dell G3 컴퓨터.

중국어 PHP가 문자가 깨져서 백그라운드로 전송되면 어떻게 해야 하나요?

PHP 파일 업로드 배경 저장의 중국어 왜곡 문제에 대한 해결책:

php 파일 업로드 배경 처리 설명:

사용자가 파일을 업로드한 후(저는 프런트 엔드에 uploadify2.3을 사용합니다) 원본 파일을 따르세요. 이름을 저장하세요(때때로 중국어로). PHP의 move_uploaded_file 명령만 사용하면 문자가 깨질 수 있습니다(저는 Ubuntu 서버입니다). IGNORE를 추가하지 않고 먼저 icotargetFile=iconv('UTF−8','GB2312//IGNORE',targetFile)을 사용해야 합니다. iconv는 문자 -(가로 막대)를 변환하지 못하고 나중에 자동으로 잘립니다. 예:

iconv('UTF-8', 'GB2312//IGNORE', "博客—yet"); // 输出"博客yet"
iconv('UTF-8', 'GB2312//IGNORE', "博客—yet"); // 输出"博客"

그래서 올바른 저장 방법은 다음과 같습니다.

$targetFile = iconv('UTF-8', 'GB2312//IGNORE', $targetFile); // UTF8转GB2312
move_uploaded_file($tempFile, $targetFile);  // 服务器把文件暂时放在$tempFile

트랜스코딩을 하면 문자가 손실되므로 새 파일 이름을 저장해야 손실된 문자를 확인하기 위해 다음과 같이 앞뒤로 변환하는 트릭을 사용했습니다. this:

$targetFile = iconv('GB2312', 'UTF-8//IGNORE', $targetFile );

php 파일 다운로드 백그라운드 처리 설명:

GB2312를 사용할 시기와 UTF8을 사용할 시기가 중요합니다.

또한, 다운로드한 파일이 깨졌는지 여부를 판단하는 열쇠는 ob_clean()과 플러시()입니다

<?php
$ROOT = $_SERVER["DOCUMENT_ROOT"]; // 获取根路径
$filename = $_GET["filename"]; // GET方式拿到文件名
$filepath = $ROOT.$filename; // 文件路径UFT8版
$filepath_iconv = iconv(&#39;UTF-8&#39;, &#39;GB2312//IGNORE&#39;, $ROOT.$filename); // 文件路径GB2312版
if (is_file($filepath_iconv))  
// 和上面一样,php的文件系统函数的输入一定要GB2312字符,否则is_file返回false
{ 
    $fileinfo = pathinfo($filepath); // 返回给客户端的用UFT8
    header(&#39;Content-type: application/x-&#39;.$fileinfo[&#39;extension&#39;]);
    header(&#39;Content-Disposition: attachment; filename=&#39;.$fileinfo[&#39;basename&#39;]);
    header(&#39;Content-Length: &#39;.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在这个文件里
    $tempFile = $_FILES[&#39;Filedata&#39;][&#39;tmp_name&#39;];
    $originalName = $_FILES[&#39;Filedata&#39;][&#39;name&#39;];
    if (empty($tempFile)) { die("抱歉,由于服务器原因,文件上传失败"); }
    $dateYmd = date("Ymd",strtotime("now"));
    $targetPath = $ROOT.$attachmentDir.$dateYmd.&#39;/&#39;; //存储文件夹(绝对路径)
    mkdir($targetPath, 0777, true);
    $new_dir_name = new_name($_FILES[&#39;Filedata&#39;][&#39;name&#39;]); //将文件名md5加密,仅保留最后一个后缀 
    mkdir($targetPath.$new_dir_name, 0777, true);
    $targetFile = $targetPath.$new_dir_name.&#39;/&#39;.$originalName;
    //移动tmp文件到指定位置,并防止中文文件名乱码。(tmp文件是服务器自动生成的)
    move_uploaded_file($tempFile, iconv(&#39;UTF-8&#39;, &#39;GB2312//IGNORE&#39;, $targetFile));
    $originalName = iconv(&#39;UTF-8&#39;, &#39;GB2312//IGNORE&#39;, $originalName);
    $originalName = iconv(&#39;GB2312&#39;, &#39;UTF-8//IGNORE&#39;, $originalName);
    //返回文件地址
    $filename = $originalName;
    $href = $ROOTTOSERVER.$attachmentDir.$dateYmd.&#39;/&#39;.$new_dir_name.&#39;/&#39;.$originalName;
    $filename = mysql_real_escape_string($filename);
    $href = mysql_real_escape_string($href);
    mysql_query("insert into `$my_articleDBtable` (articleName, articleContent) VALUES (&#39;$filename&#39;,&#39;$href&#39;)") or die(mysql_error());
    die("success");
}
function new_name($filename){
    $ret = array();
    $ext = pathinfo($filename);
    $ext = $ext[&#39;extension&#39;];
    $ext = strtolower($ext);
    if ($ext==&#39;doc&#39;|| $ext==&#39;docx&#39;) 
    {
        $name = basename($filename,$ext); 
        $name = md5($name.time()); //.&#39;.&#39;.$ext;
        return $name;
    }
    die("文件名不合法");
}
?>

추천 학습: " PHP 비디오 튜토리얼

위 내용은 PHP 중국어가 잘못된 문자와 함께 배경으로 전송되면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.