ホーム > フォーラム > 質問箱 > xsns 1.14 の文字化け

xsns 1.14 の文字化け
投稿者: avocet | 投稿日時: 2015/8/28 14:34 | 閲覧: 13710回
avocet

お世話になっております。

 別スレッドで「Xsns でファイルアップロードが出来ない」の質問をさせていただいたものです。
 旧サイト「XOOPS 2.0.16a」のサイトから新サイト「XCL 2.2.3」へ xsns のデータ移行を行っています。
 旧サイトは euc-jp xsns 1.11 、新サイトは utf-8 xsns 1.14 です。

 旧サイトから backpack でデータベースをダウンロードし文字コード変換(euc-jp -> utf-8)、 backpack でリストアしました。添付ファイルはxoops_trust_path/uploads/xsns にそのままコピーしました。

 新サイトで xsns を立ち上げ、コミュニティ、トピックはなど移行出来たことは確認出来ましたが
1.コミュニティを開いたとき、掲示板の欄にトピック名(短縮形)が表示されますが、末尾が以下のように文字化けします。XXXは伏せ字です。すべてが文字化けするのではなく、文字数省略の場所に特定の文字が来たときに起こるようです。以下は一つの例です。
 「XXXXXX/XXXXXXX��...」
 このリンクをクリックしトピックを開くとトピック名は問題なく表示(以下)されます。
 「XXXXXX/XXXXXXXX (その2)」 ( の前は半角空白です。

2.日本語添付ファイルの文字化け
 移行したトピックで、添付ファイルが日本語を含む場合その個所が文字化けしています。
 3-3_No2(������ʬ).xlsx のように。
 このファイルのリンクをクリックした場合、IE11 と chrome とで動作が異なります。
 IE11 では、ファイル保存のダイアログでファイル名が文字化けしていて、文字化けした名前で保存されます。
 chrome では、ファイル保存のダイアログでファイル名が元の文字化けしていない名前で表示されそのまま保存できます。

3.新サイトで、新規に日本語を含むファイルを添付したときはトピック上ではファイル名は、文字化けせずにIE11 、chrome とも表示されます。保存すると両方文字化けして保存されます。
 元ファイル名:test_テストです.docx
 保存されたファイル名
  IE11 : test_魘サム・docx
  chrome : test_鴻с.docx

4.文字化けではないのですが、添付ファイルが付いたトピックを編集で開き、さらに添付ファイルを付けようとすると「ファイルを追加する」のリンクが表示されるのですが、これをクリックしても何事も起こらず、リンクにカーソルを当てると画面右下に「java script:void(0)」が表示されます。

 以上、長々と書きましたが、新サイトの運用が間近にせっまっており、困っております。
 勝手な思いですが、sxns は utf-8 相性が悪いのではないでしょうか?

 対応法など何かありましたらご教示よろしくお願いいたします。

コメント(10)

Re: xsns 1.14 の文字化け 
投稿者: nao-pon | 投稿日時: 2015/8/28 23:49
nao-pon

avocetさん、こんにちは。

確かにご指摘の通りの不具合がありますね。

とりあえず、手元で修正しているものの diff を貼り付けておきますね。移行前の添付ファイルの文字化け以外は多分直っていると思います。

移行前の添付ファイルの文字化けについては、後述しますがデータベースデータの修正が必要のようです。

まずは diff です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
diff --git a/extras/html/class/smarty/plugins/modifier.mb_truncate.php b/extras/html/class/smarty/plugins/modifier.mb_truncate.php
index fac9b46..2897b63 100644
--- a/extras/html/class/smarty/plugins/modifier.mb_truncate.php
+++ b/extras/html/class/smarty/plugins/modifier.mb_truncate.php
@@ -28,7 +28,7 @@ function smarty_modifier_mb_truncate($string, $length = 80, $etc = '...', $break
 	if ($length == 0){
 		return '';
 	}
-	$encode = 'EUC-JP';
+	$encode = defined('_CHARSET')? _CHARSET : 'UTF-8';
 	
 	// decode
 	$string = preg_replace(array("/&gt;/i", "/&lt;/i", "/&quot;/i", "/&#039;/i"), array(">", "<", "\"", "'"), $string);
diff --git a/xoops_trust_path/libs/smarty/plugins/modifier.mb_truncate.php b/xoops_trust_path/libs/smarty/plugins/modifier.mb_truncate.php
index fac9b46..2897b63 100644
--- a/xoops_trust_path/libs/smarty/plugins/modifier.mb_truncate.php
+++ b/xoops_trust_path/libs/smarty/plugins/modifier.mb_truncate.php
@@ -28,7 +28,7 @@ function smarty_modifier_mb_truncate($string, $length = 80, $etc = '...', $break
 	if ($length == 0){
 		return '';
 	}
-	$encode = 'EUC-JP';
+	$encode = defined('_CHARSET')? _CHARSET : 'UTF-8';
 	
 	// decode
 	$string = preg_replace(array("/&gt;/i", "/&lt;/i", "/&quot;/i", "/&#039;/i"), array(">", "<", "\"", "'"), $string);
diff --git a/xoops_trust_path/modules/xsns/file.php b/xoops_trust_path/modules/xsns/file.php
index 3c00189..3c17963 100644
--- a/xoops_trust_path/modules/xsns/file.php
+++ b/xoops_trust_path/modules/xsns/file.php
@@ -66,10 +66,10 @@ $saved_filename = rawurldecode($org_filename);
 $ua = $_SERVER['HTTP_USER_AGENT'];
 
 if(strstr($ua, "MSIE") && !strstr($ua, 'Opera')){
-	$saved_filename = mb_convert_encoding($saved_filename, 'SJIS', 'EUC-JP');
+	$saved_filename = mb_convert_encoding($saved_filename, 'SJIS', _CHARSET);
 }
 else{
-	$saved_filename = mb_convert_encoding($saved_filename, 'UTF-8', 'EUC-JP');
+	$saved_filename = mb_convert_encoding($saved_filename, 'UTF-8', _CHARSET);
 }
 
 ini_set('include_path', XOOPS_TRUST_PATH.'/PEAR');
diff --git a/xoops_trust_path/modules/xsns/templates/topic_edit.html b/xoops_trust_path/modules/xsns/templates/topic_edit.html
index 4fbbfcd..8285572 100644
--- a/xoops_trust_path/modules/xsns/templates/topic_edit.html
+++ b/xoops_trust_path/modules/xsns/templates/topic_edit.html
@@ -74,7 +74,7 @@
 <{/section}>
 
 <div id="image_add">
-[<a href="java script:void(0);" onclick="Xsns_addUploadForm(0, 3);"><{$smarty.const._MD_XSNS_IMAGE_ADD}></a>]
+[<a href="java script:void(0);" onclick="Xsns_addUploadForm(0);"><{$smarty.const._MD_XSNS_IMAGE_ADD}></a>]
 </div>
 
 </td>
@@ -104,7 +104,7 @@
 <input type="file" name="files[]" size="40">
 </div>
 
-<{section name=cnt loop=$mod_config.file_form_limit-count($comment.files)-1}>
+<{section name=cnt start=0 loop=$mod_config.file_form_limit-1}>
 <div id="file<{$smarty.section.cnt.iteration+1}>" style="display:none;">
 <input type="file" name="files[]" size="40">
 </div>

添付ファイルのファイル名についてですが、ファイル名はデーターベーステーブル `xsns_c_file` (xsns はモジュールディレクトリ名) の `org_filename` カラムに PHP の rawurlencode() 関数でエンコードされた状態で格納されています。

以前の環境は EUC-JP 環境とのことですので、`org_filename` カラムのデータを rawurldecode() 関数に通すと EUC-JP のファイル名が得られます。得られたファイル名を UTF-8 に変換して rawurlencode() 関数へ通し得られた値で `org_filename` カラムを上書きすることで修正できます。

まずは、ご参考まで。

    投票(0)

    新しいものから | 古いものから | RSS feed
     
    To Top