php中国語が文字化けしてバックグラウンドに送信される場合の対処方法

藏色散人
リリース: 2023-03-14 14:52:02
オリジナル
1796 人が閲覧しました

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サーバーです)。最初に icotargetFile=iconv('UTF−8','GB2312//IGNORE',targetFile) を使用する必要があります。IGNORE を使用しないと、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
ログイン後にコピー

トランスコーディングにより文字が失われるため、新しいファイル名を保存する必要があります。どの文字が失われるかを確認するために、私は次のようにしました。この前後の変換トリック:

$targetFile = iconv('GB2312', 'UTF-8//IGNORE', $targetFile );
ログイン後にコピー

php ファイルのダウンロードのバックグラウンド処理の説明:

GB2312 をいつ使用するか、いつ UTF8 を使用するかが重要です。

さらに、ダウンロードしたファイルが文字化けするかどうかの鍵となるのは、ob_clean() と flash() です。

<?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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート