[- 2024 致命的] Nextcloud apps/text : 文字化け テキストファイルが破壊される。
タイトル
編集:2024.02.02
Nextcloud Text
現象: Nextcloud version [ - 29] ( ~ 2024年版)
- 開いただけでテキストファイルが破壊される。
- ファイルを勝手に UTF8N として保存する
破壊対象は、UTF8N(8bitで表現できるAnsiファイル、UTF8N)を除くすべてのファイルになります。
何年も前から問題に上がっているが公式は修正する気が全くない。
この点を踏まえ
日本語圏の人は、これは無効にしていたほうがいいということです。閲覧しただけでファイルが破壊されますからね。
さくっと、Textを 無効に変更しましょう
クラウド管理してファイル壊されては本末転倒ですね!
- 壊されたくない場合はすぐに、apps/textを無効にしましょう。
- どうしてもリモートで更新したい場合は、Nextcloud 公式以外のリモート接続の対応アプリで閲覧/編集しましょう。
- テキストファイルを保存してプレビュー&編集したい場合は OneDriveかGoogleDriveを使いましょう。
あれですね、良心がないっていうか無責任アプリですね。
ここから下はエキスパート専用記事になります。
コードを修正する場合
✓ apps/textフォルダはストア用のフォルダなので、そのまま修正するとコード改ざんチェックで修正が取り消されます。
大事なことなのでもう一度言います。
✓ extra-appsフォルダを作成します
apps/textをextra-apps/textにコピーします
extra-apps/text/appinfo/signature.json の中身を空にします。
📌 サーバーのシンボリックリンクが有効の場合は外に配置することもできます(その場合アップグレート時のバックアップの対象からはずれます)
✓ config/config.phpに加えます
[
"path" => OC::$SERVERROOT . "/apps",
"url" => "/apps",
"writable" => false,
],
[
"path" => OC::$SERVERROOT . "/extra-apps",
"url" => "/extra-apps",
"writable" => true,
],
],
お好きなように修正します。
- 問題を修正する部分
PHPコード、js (vue)コード - 利用可能なバージョンの宣言部分
- 改ざんチェックを回避する部分
ソースリポジトリからからmakeすると約600MB、約7万5千ファイル消費するので、お勧めしません。
理由はアップグレート時にバックアップとして取り込まれるからです。
※ バージョン履歴など完全に修正するにはソースからの改変が必要になります。
テスト用のサンプルファイルを生成するコード
<?php
$text = "これはテストファイルです。";
foreach(['utf-8', 'euc-jp', 'sjis-win'] as $charset) {
$fname = __DIR__ . '/' . sprintf('charset-is-%s.txt' , $charset);
$s = mb_convert_encoding($text, $charset);
file_put_contents($fname, $s);
}
【感想】
こことかみても https://help.nextcloud.com/t/shift-jis/86387、フォーク前のownCloud時代からあるバグのようですね。
やっぱり基本機能がそもそも備わっていない、だめだめアプリですね。
利用していない人が開発するとこんないい加減なアプリになるんですよ。
しかも、開発側は不具合を自ら調べようとしない。
次は直ると期待させるのも商法なんでしょうか?
上流での更新は期待できないので、フォークして 縁切りして
別アプリとしてそれを利用することで対応しました。
[Todo 優先度 高]
編集が開始されるまで、勝手に保存しない | ||
✓ | 表示用エンコードに正しく変換する | 2023年パッチ済み |
✓ | バイナリファイルは開かない | 2023年パッチ済み |
✓ | 元のファイルエンコードを保持する | 2024年パッチ済み |
✓ | 元の行末記号を保持する | 2024年パッチ済み |
✓ | 保存時のエンコード選択を用意する | 2024年パッチ済み |
[Todo 優先度 中]
- 自動保存を無効にする。それらの関連オプション設定も用意する
- 読み込み専用オプションを用意する
- エンコード不明なものは開かない。読み込み専用で開く、または、ユーザーに尋ねる。それらの関連オプション設定も用意する
スナップショット
🪄 UTF-8ファイルでテスト
🪄 Shift_JISファイルでテスト