お世話になっております。
別スレッドで「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)

nao-pon 様
ありがとうございます。
文字化け、直っています。
お忙しい中お付き合いいただき本当にありがとうございました。
また、何かあるかもしれませんがよろしくお願いいたします。
引用:ただし、この場合も IE11 では保存のダイアログで文字化けします。
恐れ入りますが IE11 への対応よろしくお願いいたします。
一つ上の投稿の修正分で直っていると思います。ご確認ください。
http://xoopscube.jp/forum/7242?comment_id=21533#comment21533
ただし、この場合も IE11 では保存のダイアログで文字化けします。
恐れ入りますが IE11 への対応よろしくお願いいたします。
一つ上の投稿の修正分で直っていると思います。ご確認ください。
http://xoopscube.jp/forum/7242?comment_id=21533#comment21533
プリロードを使わない方法で再挑戦しました。
先に実施したものは、データベースのエンコードに失敗していました。rawurlencode() を実施する際、実ファイル名のリストをファイルに一行一件で作成しましたが、行末に改行コードが入り、これがファイルの拡張子の後に "%0A" として付加されてしまい、実ファイル名と違ってしまいました。このため保存のダイアログでファイル名が file.php となってしまったようです。
ただし、この場合も IE11 では保存のダイアログで文字化けします。
恐れ入りますが IE11 への対応よろしくお願いいたします。
引用:パッチを当てたファイルは、以下です。diff/patch コマンドは使ったことがないので diff ファイルを参照し手動で変更しました。
html/class/smarty/plugins/modifier.mb_truncate.php
xoops_trust_path/libs/smarty/plugins/modifier.mb_truncate.php
xoops_trust_path/modules/xsns/file.php
xoops_trust_path/modules/xsns/templates/topic_edit.htmlデータベースのエンコードの変換は出来たものと思っています。元の質問の番号で報告します。
1.は改善しました。
2.は日本語ファイル名の表示は文字化けしなくなりました。でも何故かファイル保存のダイアログでは保存ファイル名が file.php となってしまいその名前で保存されます。データベースを元に戻すと文字化けはしますが file.php とはなりません。
3.は chrome ではOKでしたが、IE11 では文字化けしてしまいます。
4.は改善されました。プリロードを使った結果は明日報告します。
以上
引用:まずは、ご参考まで。
ファイルをダウンロードさせるのに PEAR の HTTP/Download を利用しているのですが、このパッケージはこのところメンテナンスされておらず、ダウンロードさせるだけなら、自前でコード書いたほうがよいだろうと判断し、そのように修正してみました。
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
|
前回からの変更分は xoops_trust_path/modules/xsns/file.php のみです。
修正済みファイルを便宜的にこちらに置いておきます。
ご確認ください。
尚、データベースのデータを UTF-8 の URLエンコード値に変更したのであれば、プリロードファイルは撤去しても大丈夫です。
プリロードを使った結果です。元質問の1と4は解決しています。
2.は Chrome ではファイル名表示は文字化けせず、そのまま保存できます。IE11 ではファイル名表示は文字化けしませんが、保存のダイアログではファイル名が文字化けし、文字化けのまま保存できます。
3.は chrome ではOKでしたが、IE11 ではファイル名表示は文字化けしませんが、保存のダイアログでファイル名が文字化けします。
Chrome では、問題ないのですが IE11 では文字化けしてしまいますね。
以上です。
プリロードを使った結果です。
元質問の1と4は解決しています。
2.は Chrome ではファイル名表示は文字化けせず、そのまま保存できます。IE11 ではファイル名表示は文字化けしませんが、保存のダイアログではファイル名が文字化けし、文字化けのまま保存できます。
3.は chrome ではOKでしたが、IE11 ではファイル名表示は文字化けしませんが、保存のダイアログでファイル名が文字化けします。
Chrome では、問題ないのですが IE11 では文字化けしてしまいますね。
以上です。
お世話になっています。まずは、こちらの方法での結果です。
パッチを当てたファイルは、以下です。diff/patch コマンドは使ったことがないので diff ファイルを参照し手動で変更しました。
html/class/smarty/plugins/modifier.mb_truncate.php
xoops_trust_path/libs/smarty/plugins/modifier.mb_truncate.php
xoops_trust_path/modules/xsns/file.php
xoops_trust_path/modules/xsns/templates/topic_edit.htmlデータベースのエンコードの変換は出来たものと思っています。元の質問の番号で報告します。
1.は改善しました。
2.は日本語ファイル名の表示は文字化けしなくなりました。でも何故かファイル保存のダイアログでは保存ファイル名が file.php となってしまいその名前で保存されます。データベースを元に戻すと文字化けはしますが file.php とはなりません。
3.は chrome ではOKでしたが、IE11 では文字化けしてしまいます。
4.は改善されました。プリロードを使った結果は明日報告します。
以上
引用:まずは、ご参考まで。
お世話になっています。
まずは、こちらの方法での結果です。
パッチを当てたファイルは、以下です。diff/patch コマンドは使ったことがないので diff ファイルを参照し手動で変更しました。
html/class/smarty/plugins/modifier.mb_truncate.php
xoops_trust_path/libs/smarty/plugins/modifier.mb_truncate.php
xoops_trust_path/modules/xsns/file.php
xoops_trust_path/modules/xsns/templates/topic_edit.html
データベースのエンコードの変換は出来たものと思っています。
元の質問の番号で報告します。
1.は改善しました。
2.は日本語ファイル名の表示は文字化けしなくなりました。でも何故かファイル保存のダイアログでは保存ファイル名が file.php となってしまいその名前で保存されます。データベースを元に戻すと文字化けはしますが file.php とはなりません。
3.は chrome ではOKでしたが、IE11 では文字化けしてしまいます。
4.は改善されました。
プリロードを使った結果は明日報告します。
以上
avocetさん、こんにちは。確かにご指摘の通りの不具合がありますね。
とりあえず、手元で修正しているものの diff を貼り付けておきますね。移行前の添付ファイルの文字化け以外は多分直っていると思います。
移行前の添付ファイルの文字化けについては、後述しますがデータベースデータの修正が必要のようです。
添付ファイルのファイル名についてですが、ファイル名はデーターベーステーブル `xsns_c_file` (xsns はモジュールディレクトリ名) の `org_filename` カラムに PHP の rawurlencode() 関数でエンコードされた状態で格納されています。以前の環境は EUC-JP 環境とのことですので、`org_filename` カラムのデータを rawurldecode() 関数に通すと EUC-JP のファイル名が得られます。得られたファイル名を UTF-8 に変換して rawurlencode() 関数へ通し得られた値で `org_filename` カラムを上書きすることで修正できます。
まずは、ご参考まで。
EUC-JP 環境での添付ファイルのファイル名データのままでも、できるだけ文字化けしないような方法にしてみました。ただし、文字エンコーディングの自動判定を行なっているので、以前のデータの文字化けが残ったり、新しいデータの分が文字化けを起こしたりする可能性がありますので、最善の方法はデータベースデータを前述の方法で修正し、このプリロードを使わない方法になります。
まず、次の PHP ファイルを 「encodeauto.class.php」として html/modules/xsns(インストールディレクトリ名)/preload ディレクトリに配置してください。
これで問題がなければ、リポジトリに反映し新バージョンとします。
1 2 |
|
そして、次の 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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
|
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 |
|
添付ファイルのファイル名についてですが、ファイル名はデーターベーステーブル `xsns_c_file` (xsns はモジュールディレクトリ名) の `org_filename` カラムに PHP の rawurlencode() 関数でエンコードされた状態で格納されています。
以前の環境は EUC-JP 環境とのことですので、`org_filename` カラムのデータを rawurldecode() 関数に通すと EUC-JP のファイル名が得られます。得られたファイル名を UTF-8 に変換して rawurlencode() 関数へ通し得られた値で `org_filename` カラムを上書きすることで修正できます。
まずは、ご参考まで。