teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

10

修正

2018/04/17 06:23

投稿

annderber
annderber

スコア98

title CHANGED
File without changes
body CHANGED
@@ -29,8 +29,8 @@
29
29
  $val = convert_eol($val);
30
30
  });
31
31
 
32
- // 文字コード変換
32
+ // 文字コード変換、データは必ず1次元配列
33
- mb_convert_variables('SJIS-win', 'UTF-8', $val);
33
+ mb_convert_variables('SJIS-win', 'UTF-8', $row);
34
34
 
35
35
  // すべての項目をダブルクオートで囲んでファイルに書き出しをする
36
36
  fwrite($f, '"'.implode('","',$row) . '"' . "\r\n");

9

加筆

2018/04/17 06:23

投稿

annderber
annderber

スコア98

title CHANGED
File without changes
body CHANGED
@@ -17,6 +17,9 @@
17
17
 
18
18
  $row = ['フィールド1', 'フィールド2'];
19
19
 
20
+ //フィールドごとの最大文字数分を取得
21
+ $row[0] = mb_substr($row[0], 0, 10);
22
+
20
23
    // 文字コードや特定も文字を変換
21
24
  array_walk_recursive($row, function(&$val, $key) {
22
25
  //エスケープ

8

修正

2018/04/17 06:20

投稿

annderber
annderber

スコア98

title CHANGED
File without changes
body CHANGED
@@ -22,7 +22,7 @@
22
22
  //エスケープ
23
23
  $val = str_replace('"', '""', $val);
24
24
       
25
-     // CS or RF → CSRF
25
+     // CR or LF → CRLF
26
26
  $val = convert_eol($val);
27
27
  });
28
28
 
@@ -35,6 +35,10 @@
35
35
  2.ファイルアップロード
36
36
  PHPのftp_nb_put関数でファイルをアップロードしています。転送モードはバイナリです。
37
37
 
38
+ 3.環境
39
+ 〇クライアント
40
+  PHP・・・5.6
41
+  文字コード・・・UTF-8
38
42
 
39
43
  あまり詳細な処理を記述できないのですが、
40
44
  よろしくお願いいたします。

7

追記

2018/04/17 05:52

投稿

annderber
annderber

スコア98

title CHANGED
File without changes
body CHANGED
@@ -10,5 +10,31 @@
10
10
 
11
11
  csvアップロード時、転送モードをバイナリにすることでこのような現象が発生する可能性はありますでしょうか。また単純にFTPでcsvファイルをアップロードするとき、文字列の一部が欠けるなどの現象はありえるでしょうか。
12
12
 
13
+ 追記:
14
+ 1.CSV書き出し(一部抜粋)
15
+ ```php
16
+   $f = fopen($file_path, "w");
17
+
18
+ $row = ['フィールド1', 'フィールド2'];
19
+
20
+   // 文字コードや特定も文字を変換
21
+ array_walk_recursive($row, function(&$val, $key) {
22
+ //エスケープ
23
+ $val = str_replace('"', '""', $val);
24
+      
25
+     // CS or RF → CSRF
26
+ $val = convert_eol($val);
27
+ });
28
+
29
+ // 文字コード変換
30
+ mb_convert_variables('SJIS-win', 'UTF-8', $val);
31
+
32
+ // すべての項目をダブルクオートで囲んでファイルに書き出しをする
33
+ fwrite($f, '"'.implode('","',$row) . '"' . "\r\n");
34
+ ```
35
+ 2.ファイルアップロード
36
+ PHPのftp_nb_put関数でファイルをアップロードしています。転送モードはバイナリです。
37
+
38
+
13
39
  あまり詳細な処理を記述できないのですが、
14
40
  よろしくお願いいたします。

6

修正

2018/04/17 05:39

投稿

annderber
annderber

スコア98

title CHANGED
File without changes
body CHANGED
@@ -3,12 +3,12 @@
3
3
  現在、サーバ間でftpによるcsvアップロード処理を行っているのですが、
4
4
  csv内の「テストサーバー」という文字列が、アップロードされたcsv側では「テストサ?」という文字列になっています。csv内にある他のフィールドの文字列は正常に表示されるのですが、上記部分だけ文字化け(文字が欠け)てアップロードされてしまいます。このときftpの転送モードはバイナリにしています。
5
5
  また、この現象は毎回起こるのではなく、過去数件中1件だけしか起こっていません。
6
-
7
- csvアップロード時、転送モードをバイナリにすることでこのような現象が発生する可能性はありますでしょうか。または何か他の原因が考えられますでしょうか。
8
6
  文字コードはサーバー、クライアントともにSJISです。
9
7
 
10
8
  現状ローカルでcsvを出力した段階では文字化けは起こしていないようです。
11
9
  そもそもこの現象自体再現性がないので、なんとも言えないのですが。。。
12
10
 
11
+ csvアップロード時、転送モードをバイナリにすることでこのような現象が発生する可能性はありますでしょうか。また単純にFTPでcsvファイルをアップロードするとき、文字列の一部が欠けるなどの現象はありえるでしょうか。
12
+
13
13
  あまり詳細な処理を記述できないのですが、
14
14
  よろしくお願いいたします。

5

修正

2018/04/17 02:57

投稿

annderber
annderber

スコア98

title CHANGED
File without changes
body CHANGED
@@ -7,7 +7,7 @@
7
7
  csvアップロード時、転送モードをバイナリにすることでこのような現象が発生する可能性はありますでしょうか。または何か他の原因が考えられますでしょうか。
8
8
  文字コードはサーバー、クライアントともにSJISです。
9
9
 
10
- 現状ローカルでcsvを出力した場合では文字化けは起こしていないようです。
10
+ 現状ローカルでcsvを出力した段階では文字化けは起こしていないようです。
11
11
  そもそもこの現象自体再現性がないので、なんとも言えないのですが。。。
12
12
 
13
13
  あまり詳細な処理を記述できないのですが、

4

修正

2018/04/17 02:46

投稿

annderber
annderber

スコア98

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,10 @@
5
5
  また、この現象は毎回起こるのではなく、過去数件中1件だけしか起こっていません。
6
6
 
7
7
  csvアップロード時、転送モードをバイナリにすることでこのような現象が発生する可能性はありますでしょうか。または何か他の原因が考えられますでしょうか。
8
- 文字コードはサーバー、クライアントともにSJISです
8
+ 文字コードはサーバー、クライアントともにSJISです
9
9
 
10
+ 現状ローカルでcsvを出力した場合では文字化けは起こしていないようです。
11
+ そもそもこの現象自体再現性がないので、なんとも言えないのですが。。。
12
+
10
- あまり処理の詳細を記述することが出来ないのですが、
13
+ あまり詳細な処理を記述できないのですが、
11
14
  よろしくお願いいたします。

3

修正

2018/04/17 02:41

投稿

annderber
annderber

スコア98

title CHANGED
File without changes
body CHANGED
@@ -5,6 +5,7 @@
5
5
  また、この現象は毎回起こるのではなく、過去数件中1件だけしか起こっていません。
6
6
 
7
7
  csvアップロード時、転送モードをバイナリにすることでこのような現象が発生する可能性はありますでしょうか。または何か他の原因が考えられますでしょうか。
8
+ 文字コードはサーバー、クライアントともにSJISです
8
9
 
9
10
  あまり処理の詳細を記述することが出来ないのですが、
10
11
  よろしくお願いいたします。

2

修正

2018/04/17 02:37

投稿

annderber
annderber

スコア98

title CHANGED
File without changes
body CHANGED
File without changes

1

修正

2018/04/17 02:32

投稿

annderber
annderber

スコア98

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,5 @@
1
1
  お世話になります。
2
2
 
3
- お世話になります。
4
-
5
3
  現在、サーバ間でftpによるcsvアップロード処理を行っているのですが、
6
4
  csv内の「テストサーバー」という文字列が、アップロードされたcsv側では「テストサ?」という文字列になっています。csv内にある他のフィールドの文字列は正常に表示されるのですが、上記部分だけ文字化け(文字が欠け)てアップロードされてしまいます。このときftpの転送モードはバイナリにしています。
7
5
  また、この現象は毎回起こるのではなく、過去数件中1件だけしか起こっていません。