Webform モジュールでCSVダウンロードをする際の文字化け

  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.

webform というモジュールがありまして、アンケートや申込書フォームを自由に作成することができ、 サイト閲覧者がアンケートへの回答や申込内容を送信できる便利なツールです。 しかも送信されたアンケート結果なり申込内容などをCSVファイルとしてダウンロードできるのですが、 日本語で作られたタイトル(これがファイル名になります)やフォームの項目はダウンロードの際、文字化けしてしまうんですよね。 何か対処方法はありますでしょうか? ちなみにこのモジュールの翻訳はpinerayさんが作成してくださっていて、大変助かります。 ありがとうございます。 ※なんか自動改行が効かなくなってますね・・・。元々こうでしたっけ?

この記事のトラックバックURL:

http://drupal-jp.osdn.jp/main/trackback/113

コメント

サーバの問題でしょうか?

Webform 5.x-1.10 で試してみましたが、
● ファイル名:「連絡.csv」
● テキストエリアに入力した内容:「てすと」
で、文字化けはしなかったですね。 サーバ設定の問題ですかね?
もちろん、UTF-8 なので、EXCEL とかで表示すると文字化けしますけど。
詳しいことがわからないので、何ともいえませんが、ご報告まで。

IE7での現象です(ファイル名文字化け)

レスありがとうございます。大事なことを伝え忘れてました。
IE7での現象です(IE6では未確認ですが、多分同じだと思います)。
Firefox 2.0.0.13ではファイル名の文字化けはしません。EXCELで表示してもファイル名は大丈夫です。項目名はダメです。
ダウンロードリンクをクリックすると自動的にEXCELで開いて表形式で見られないと意味がないんですよね…。
今思い出したのですが、D4.6用バージョンの時も同様で、webform.inc にマルチバイト文字列に関する処理を行なうことで
解決したようでした。
また何かわかったら報告します。

webform_report.inc の修正でも解決できるようです。

IE とか Excel だと、UTF-8 の CSV は文字化けする仕様(Microsoft のサイトによると)ですからね。
Windows Vista や Excel 2007 などでは、多少は考慮されているようですが、どうなんでしょうね?

と、ファイル名からして webform_report.inc も怪しいかも…と思って確認してみたのですが、
_webform_results_download() 関数内の書き込み処理部分で文字コードの変換を行ったら、
IE6 でダウンロード → 「開く」を選択 で、文字化けせずに表示できました。 もちろん、「保存」でも大丈夫でした。

もう解決されているかもしれませんが、一応、ご報告まで。

いえ、まだ未解決です

4.6版のwebformにはwebform_report.inc というファイルはなかったんですけど、5.xには確かにありますね。
で、確かにコードのコメントには何やらそれっぽいところがありますね。

wrote:
_webform_results_download() 関数内の書き込み処理部分で文字コードの変換を行ったら

とのことですが、よろしければ具体的に教えていただけないでしょうか?

パッチの内容を公開しました。

CSV ファイル内の見出しにあたる部分もついでに日本語翻訳できるようになっていた方が…
ということで、そのあたりも含めて修正した内容を Webform - CSV ダウンロードファイルの文字化け修正 | DRUPAL*DRUPAL に公開しました。
もっとスマートな方法もありそうですが、とりあえず、ということでよろしくお願いします。

一応、コード部分をまるごとコピーしていただければ、patch ファイルとして使用できると思います。
(TortoiseSVN でパッチを作成して、その内容をそのままコピペしているだけなので…)

文字化けに関しては、ファイル書込み時に文字コードを UTF-8 から Shift-JIS に変換するという方法で、
@fwrite($handle, $file_record); とか、@fwrite($handle, $row ."\n"); とかの部分の
$file_record や $row を mb_convert_encoding($row, "Shift-JIS", "UTF-8") としています。

Firefox と IE6 でダウンロードしても、そのまま開いても文字化けしないことを確認していますが、
Shift-JIS に変換しているだけなので、Shift-JIS に対応していない文字の場合は逆に文字化けしてしまう可能性があると思います。

パッチを適用してみましたが…

http://drupalxdrupal.com/blog/0829/125
のパッチを適用してみました。

結果、csvファイルのタイトルの文字化けは修正されたのですが、
csvファイルを開くと、項目名が化けていますね(日本語なのに化けていないのもあります、なぜか)。

パッチを適用する前に化けてしまったものは修復されないのでしょうか?
パッチはちゃんと適用したつもりなのですが…。

うーん、再現できません…

サイトのコードをコピペしてパッチを適用するという方法で再確認してみましたが、文字化けを再現できません…申し訳ありません。

> パッチを適用する前に化けてしまったものは修復されないのでしょうか?

CSV ファイルのダウンロード時に出力処理をするようになっている(はず)なので、パッチ適用前とか後とかは関係ないと思います。
実際に、私の環境では、パッチ適用後のものに差し替えると文字化けなし、パッチ適用前のものに差し替えると文字化けするという状態に変更されますので…

パッチを適用するのではなく、手作業で修正してみるとどうなるでしょうか?

申し訳ありませんでした

正しくパッチを当てたつもりだったのですが、もう一度確認したところ、全くおかしなことをしていたことがわかりました。
きちんとやり直した結果、すべてうまく行きました。
お騒がせして申し訳ありませんでした。