ホームページ バックエンド開発 PHPチュートリアル CSVファイルをPHP_PHPにインポートする際に文字化けが発生する問題を解決する方法_PHPチュートリアル

CSVファイルをPHP_PHPにインポートする際に文字化けが発生する問題を解決する方法_PHPチュートリアル

Jul 13, 2016 am 10:39 AM
文字化け

今日は主に、php に csv ファイルをインポートする方法を書きたいと思います。すべてインポート方法で実装できます。しかし、インポート時に 2 つの問題が発生しました。1 つは、Windows でコードを書くときにテストで文字化けが発生するという問題でしたが、それは解決されました。 2つ目は、Linuxシステムに送信したところ、また文字化けが発生したことです。最初はコードが文字化けする理由がわかりませんでしたが、最初はコードの svn 送信のエラーだと思いました。結局、私の友人が phpcms で働いているのに質問しました。 Linux に送信すると必ずエラーが発生するが、後で原因が文字化けであることが判明したとのこと。早速本題に入り、これら 2 つの問題を解決する方法を見てみましょう。

問題は解決されました:

PHP は csv ファイルを読み取りますが、Windows では中国語を読み取ることができません。私はすぐに次の設定を行う関数 mb_convert_encoding() を思いつきました。 $str = mb_convert_encoding($str, "UTF-8) "、"GBK"); それで終わりです。もちろん、次のように iconv(); を使用して iconv('GBK', "UTF-8//TRANSLIT//IGNORE", $str); を使用することもできます。これらの 2 つの関数は Windows での文字化けの問題を解決します。 。

2 番目の問題の解決策:

PHP は csv ファイルを読み取りますが、Linux では中国語を読み取ることができません。Baidu と Google の後で解決策を見つけました。それは、setlocale(LC_ALL, 'zh_CN') というコード行を追加することです。 ); はい、目がくらんでしまいます。非常に簡単なので、知らなかった場合は、理解するのに多くの時間を費やすことができます。
PHP setlocale()関数解説
定義と使い方

setlocale()関数は地域情報(地域情報)を設定します。

地域情報は、地理的エリアの言語、通貨、時間、その他の情報です。この関数は現在のロケールを返すか、失敗した場合は false を返します。
以下はデータ収集に一般的に使用される領域識別子です:



コードをコピーします コードは次のとおりです:
zh_CN GB2312
en_US.UTF-8 UTF-8
zh_TW BIG5
zh_HK BIG 5-HKSCS
zh_TW.EUC -TW EUC-TW
zh_TW.UTF-8 UTF-8
zh_HK.UTF-8 UTF-8
zh_CN.GBK GBK


例:
utf-8: setlocale(LC_ALL, 'en_US. UTF-8′) ;
簡略化: setlocale(LC_ALL, 'zh_CN');

setlocale() 関数について説明する理由は、csv ファイルを Linux システムにインポートしたときに、次のような文字化けが発生したためです。 mb_convert_encoding() と iconv() の使用 どちらの関数も最終的な問題を解決できませんでした。最後に、csv ファイルのインポートの先頭にこの文 setlocale(LC_ALL, 'zh_CN'); を追加しました。その後、情報を検索したところ、fgetcsv() 関数が影響を受けやすいことがわかりました。ロケール設定。たとえば、LANG が en_US.UTF-8 に設定されている場合、シングルバイトでエンコードされたファイルは読み取りエラーが発生するため、カルチャを設定する必要があります。特別にみんなと共有します。

次のコードも使用してみましたが、機能しませんでした。これらは CSV ファイルを生成するためのヘッダー設定です。私にはうまくいかないかもしれませんが、あなたにはうまくいくかもしれません。そこで私は、CSV ファイルをインポートするときに文字化けに遭遇した同僚を助けるために、それを整理し、他に方法がない場合に対処するのが非常に困難だったため、最善を尽くしました。誰でも試してみることができます!あなたに属するものは常にあります。



コードをコピーします コードは次のとおりです:
$csvContent="csvzero,csvone,csvtwo,csvthree,csvfour,csvfive"; /vnd.ms -excel; charset=GB2312");
header("Pragma: public");
header("Expires: 0");
header("キャッシュ制御: 必須再検証、事後チェック = 0 、事前チェック =0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type : アプリケーション/ダウンロード") ;
header("Content-Disposition:attachment;filename=CSV data.csv ");
header("Content-Transfer-Encoding:binary ");
$csvContent = iconv("utf-8 ","gb2312", $csvContent);
echo $csvContent;
終了;
?>


CSV ファイルをインポートするための PHP のコードを詳しく見てみましょう:

2 つの関数の簡単な紹介、

mb_detect_encoding() は、文字エンコーディングが検出された場合、または指定された文字列のエンコーディングが検出できない場合に FALSE を返します。 。

fgetcsv() 関数は、ファイル ポインターから行を読み取り、CSV フィールドを解析します。 fgets() と似ていますが、 fgetcsv() は読み取った行を解析し、CSV 形式でフィールドを見つけ、それらのフィールドを含む配列を返す点が異なります。 fgetcsv() は、ファイルの終わりに達した場合など、エラーが発生した場合に FALSE を返します。

注: PHP 4.3.5 以降、 fgetcsv() の操作はバイナリセーフです。

注: CSV ファイル内の空行は、単一の null フィールドを含む配列として返され、エラーとして扱われません。

注: この機能はロケール設定の影響を受けます。たとえば、LANG が en_US.UTF-8 に設定されている場合、シングルバイトでエンコードされたファイルには読み取りエラーが発生します。

注: ファイルを読み取るときに PHP が Macintosh ファイルの行末文字を認識できない場合は、auto_detect_line_endings ランタイム構成オプションをアクティブにすることができます。
コードをコピーします コードは次のとおりです:

setlocale(LC_ALL, 'zh_CN'); //地域情報を設定
$file = $_FILES['files']
$file_type = substr(strstr($file['name) '],'.'),1);
if ($file_type != 'csv'){
echo "";
終了;
$handle = fopen($file['tmp_name'],"r");
$file_encoding = mb_detect_encoding($handle); = 'ASCII'){
echo "";
exit; row = 0;
$sy="";
while ($data = fgetcsv($handle,',')){
if ($row == 0)
続行 ;
$num = count($data);
for ($i=0; $i$str = (string)$data[$i].'|'; $str = mb_convert_encoding($str, "UTF-8", "GBK"); // ソース コードは GBK であることがわかっており、utf-8 に変換されます
$sy .= $str; // ここで行うことは次のとおりです。 '|' を使用して csv ファイル内のすべての内容をまとめると、より複雑になります。製品情報をインポートするため、ユーザーのニーズに応じてインポートする必要があるデータを定義する必要があります
//輸入される。
}
}
if ($sy) { $sy = rtrim($sy, '|') }
$arr =explode('|',$sy);
$key = array_slice($arr,0, $num); //この配列は CSV ファイル内のタイトルであり、商品 ID、タイトル、セールスポイントなどのデータです。
$length = array(); = count($arr) ;
$p = $co/$num //取り出すデータの長さを求める
for($j=0;$j$offset =($j-1)* $num; //オフセットはページングと同じで、オフセットを元に取り出した配列が商品の情報になります。
if($j==0){
$length[] = array_slice($arr,0,$num);
}else{
$length[] = array_slice($arr,$num+$offset,$num) ;//フィールドとプロダクトを取得します
}
}
$arrtitle = array();
$arrtagname = DB::select('フィールド ID', 'フィールド名')-> ; from('フィールドテーブル')->fetch_all();
foreach ($arrtagname として $value) {
$arrfileds[$value['fileds_tags']] = $value['fileds_name']; $fileds as $v)
{
$temarr=explode('-', $v);
if (isset($temarr[0]) && !empty($temarr[0])) {
if (isset ( $temarr[1]) && !empty($temarr[1])) {
if ($temarr[1] == 'ウェンベン') {
$arrtitle[] = $arrfileds[$temarr[0]] '。 Text';
}
} else {
if ($temarr[0] != 'pic') { //フィールドが写真の場合は削除します
$arrtitle[] = $arrfileds[$temarr[0]] ;
}
}
}

$skey = array();
$order[] = 'act_tag' = 'channel_tag'; [] = 'created_time';
$order[] = 'orderby';
$f = $co/$num;//
の項目数を調べます; $p//ここでは、自分のニーズに応じて必要なデータを見つけ、必要な製品フィールドの識別を通じてテーブル内の対応する英語の識別を見つけます。ユーザー。
$skey[]= DB::select('フィールド ID')->from('フィールド テーブル')->where('フィールド名', '=', $arrtitle[$p])-> fetch_row();
$rows .= $skey[$p]['フィールド ID'].'|'
}
if($rows){ $rows = rtrim($rows,'|'); if(!empty($rows)){ $exrows =explode('|',$rows); }else{ $exrows = array(); }
$skeys = array_merge($order,$exrows); = count($skeys); //フィールドの数
if(!empty($length)){
for($x=1;$x$orders = array();
$orders[] = $channel_tag;
$newlen = array_merge($orders, $) length[$x]);
if($count1 !== count($newlen)){ //商品フィールドの長さが商品の長さと異なる場合、ユーザーがフィールドを入力していないことがわかります。
$newrs = array( );
echo "";
exit();
}else{ //start
$arrimport = array_combine($ skeys,$newlen); // 2 つの配列が等しい場合、配列を結合し、CSV にインポートされた日付をタイムスタンプに変更してデータベースに保存します
if(!empty($arrimport[ 'start_time'])){ $sta = strtotime($arrimport['start_time']); }else{ $sta=(int)0; }
if(!empty($arrimport['end_time']){ $ end = strtotime($arrimport[ 'end_time']); }else{ $end=(int)0 }
$arrtime=array('start_time'=>$sta,'end_time'=>$end);
if(!empty($ armimport['start_time']) && !empty($arrimport['end_time'])){
$newrs=array_merge($arrimport,$arrtime)
}else{
$newrs = 配列();
echo "< ;script type="text/javascript">alert("".'「.($x-1).」項目を確認してください。 「インポートに失敗しました!」 '.""); ";
fclose($handle);
exit();
}
if(count($skeys) == count($newrs)){
DB::insert('製品テーブル', array_values($skeys))
->values(array_values($newrs))
->execute();
}
} //end
}
}
if( $row-1==(int)0){
echo "";
}else{
echo "

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

文字化けした単語のページ番号を解決する方法 文字化けした単語のページ番号を解決する方法 Jun 25, 2023 pm 03:23 PM

Word のページ番号が文字化けする場合の解決策: 1. Word 文書を開き、左上隅にある [ファイル] オプションをクリックします; 2. [詳細] オプションを選択し、[オプション] ボタンをクリックします; 3. [詳細] を選択します。 Word のオプション内; 4. . 「文書の内容を表示」の「フィールド値の代わりにフィールドコードを表示」を見つけて、先頭のチェックを外し、「OK」をクリックしてホームページに戻ります。

Linuxで中国語の文字化けを解決する方法 Linuxで中国語の文字化けを解決する方法 Feb 21, 2024 am 10:48 AM

Linux の中国語の文字化け問題は、中国語の文字セットとエンコーディングを使用する場合によく見られる問題です。文字化けは、ファイルのエンコード設定が正しくない、システム ロケールがインストールまたは設定されていない、端末の表示設定エラーなどが原因で発生する可能性があります。この記事では、いくつかの一般的な回避策を紹介し、具体的なコード例を示します。 1. ファイルのエンコード設定を確認します。ファイルのエンコードを表示するには file コマンドを使用します。ターミナルで file コマンドを使用して、ファイルのエンコードを表示します: file-ifilename。出力に「charset」がある場合

Tomcat 起動時に文字化けしたコードを解決する方法 Tomcat 起動時に文字化けしたコードを解決する方法 Dec 26, 2023 pm 05:21 PM

Tomcat 起動時の文字化けの解決策: 1. Tomcat の conf 設定ファイルを変更する; 2. システム言語を変更する; 3. コマンド ライン ウィンドウのエンコードを変更する; 4. Tomcat サーバーの設定を確認する; 5. プロジェクトのエンコードを確認する; 6. ログを確認するファイル; 7 、他の解決策を試してください。詳細な導入: 1. Tomcat の conf 構成ファイルを変更し、Tomcat の conf ディレクトリを開き、「logging.properties」ファイルなどを見つけます。

Windows10で中国語が文字化けする問題を解決する方法 Windows10で中国語が文字化けする問題を解決する方法 Jan 16, 2024 pm 02:21 PM

Windows 10では文字化けが多発しております。多くの場合、この背後にある理由は、オペレーティング システムが一部の文字セットのデフォルト サポートを提供していないか、設定された文字セット オプションにエラーがあることです。適切な薬を処方するために、実際の操作手順を以下で詳しく分析します。 Windows 10 の文字化けコードを解決する方法 1. 設定を開いて「時刻と言語」を見つけます 2. 次に「言語」を見つけます 3. 「言語設定の管理」を見つけます 4. ここで「システム地域設定の変更」をクリックします 5. 図のようにボックスをチェックしますそして、「必ず確認してください」をクリックします。

Linux tty で中国語文字化けが発生する場合の対処方法 Linux tty で中国語文字化けが発生する場合の対処方法 Mar 16, 2023 am 09:20 AM

Linux tty の中国語文字化けの解決策: 1. 「sudo apt-get install fbterm」コマンドでフォント fbterm をダウンロードする; 2. 「sudo fbterm」コマンドを実行する; 3. フォントとフォント サイズを「font-names」に変更する=Ubuntu Mono font-size=14」で十分です。

win11のシステムドキュメントが文字化けする問題を解決する方法 win11のシステムドキュメントが文字化けする問題を解決する方法 Jun 29, 2023 pm 06:29 PM

win11でテキストドキュメントが文字化けする問題を解決するにはどうすればよいですか?多くのユーザーがwin11システムを使用していると、テキストドキュメントが文字化けして正常に読むことができなくなり、この問題を解決する方法が分からない友人も多くいます。実際、この方法は難しいことではありません。以下に、Windows 11 のシステム ドキュメントが文字化けする問題を解決する手順を編集者がまとめました。何かのヒントになれば幸いです。文字化けした Windows 11 システム ドキュメントを解決する手順: 1. まず、win11 のコントロール パネルを開き、下の検索ボックスに「コントロール パネル」と入力し、[検索] をクリックしてコントロール パネルに入ります。 2. パネルに入ったら、時計とエリアを見つけてクリックして入力し、エリア オプションをクリックします。 3. 入力後、管理パネルをクリックし、システムの地域設定の変更をクリックします。

filezillaの文字化けを解決する方法 filezillaの文字化けを解決する方法 Nov 20, 2023 am 10:16 AM

filezilla の文字化けの解決策は次のとおりです: 1. エンコード設定を確認する; 2. ファイル自体を確認する; 3. サーバー構成を確認する; 4. 他の転送ツールを試す; 5. ソフトウェアのバージョンを更新する; 6. ネットワークの問題を確認する; 7 . 技術サポートを求めてください。 FileZillaの文字化け問題を解決するには、多方面から始めて徐々に原因を究明し、それに応じた対策を講じて修復する必要があります。

dllファイルを開くときに文字化けする問題を解決する編集方法 dllファイルを開くときに文字化けする問題を解決する編集方法 Jan 06, 2024 pm 07:53 PM

多くのユーザーがコンピュータを使用していると、拡張子が dll のファイルがたくさんあることに気づきますが、そのファイルの開き方が分からないユーザーも多いので、知りたい方は以下を参照してください。 dll ファイルを開いて編集するには: 1. 「exescope」というソフトウェアをダウンロードし、インストールします。 2. 次に、dll ファイルを右クリックし、[exescope でリソースを編集] を選択します。 3. ポップアップ エラー プロンプト ボックスで [OK] をクリックします。 4. 次に、右側のパネルで、各グループの前にある「+」記号をクリックして、グループに含まれるコンテンツを表示します。 5. 表示したい dll ファイルをクリックし、「ファイル」をクリックして「エクスポート」を選択します。 6. そうすれば、次のことができます

See all articles