ローカルルールの文字化けを修正、!addコマンドの文字数上限を追加 #32

Merged
stat2 merged 8 commits from konkon-fox/delightly-v2fork:main into main 2023-10-20 17:38:21 +09:00
Contributor

ローカルルールの文字化けを修正

概要

現在、専ブラでローカルルールを開くと文字化けするのでその修正です。

注意事項

この変更を行う前に現状のローカルルールのバックアップを必ず取ってください。
文字コードを変更する修正のため現状のローカルルールは文字化けで見られなくなります。

現在の状況

管理画面での編集

/test/operate/header.phpが該当のコードです。
head.txt(utf-8)を読み書きしているので文字化けは起こりません。

専ブラから開くローカルルール

/${bbs}/head.txt(utf-8)を参照します。専ブラで使用する文字コードはShift_JISなので文字化けします。

通常ブラウザ版の板トップページとスレ作成ページ

/static/board.js/test/createthread.phpでJavaScriptを使用してincludeしています。
head.txt(utf-8)を読み込み、表示しているので文字化けは起こりません。

1000000000.dat(専ブラのTL)

head.txt(utf-8)を読み込み、index.jsonと合わせた後にShift_JISに変換しているので文字化けは起こりません。

どう修正するか

専ブラがShift_JISを扱う以上、head.txtはShift_JISにするしかありません。
それに合わせて各所を変更していきます。

修正後の仕様

管理画面での編集

/test/operate/header.phpが該当のコードです。
head.txt(Shift_JIS)を読み取り、utf-8に変換してから表示します。(※この際に既存のutf-8のhead.txtは文字化けします)
textareaで変更した文字列を保存する際にはShift_JISに変換してから保存します。

専ブラから開くローカルルール

/${bbs}/head.txt(Shift_JIS)を参照します。専ブラで使用する文字コードはShift_JISなので正しく表示されます。

通常ブラウザ版の板トップページとスレ作成ページ

/static/board.js/test/createthread.phpでJavaScriptを使用してincludeしています。
head.txt(Shift_JIS)を読み込み、utf-8に変換してから表示します。

1000000000.dat(専ブラのTL)

head.txt(Shift_JIS)を読み込み、utf-8に変換した後index.jsonと合わせます。
その後再度Shift_JISに変換するので文字化けは起こりません。
※1000000000.datへの変更は任意のスレにレスすることで反映されます。

!addコマンドの文字数上限を追加

概要

!addコマンドについて、追記可能な文字数の制限処理がなかったので追加しました。
また、将来コマンドを追加する機会に備えて、>>1の本文を<hr>で分けた上部に追記分を追加するような処理に変更しました。

## ローカルルールの文字化けを修正 ### 概要 現在、専ブラでローカルルールを開くと文字化けするのでその修正です。 ### 注意事項 **この変更を行う前に現状のローカルルールのバックアップを必ず取ってください。** 文字コードを変更する修正のため現状のローカルルールは文字化けで見られなくなります。 ### 現在の状況 #### 管理画面での編集 `/test/operate/header.php`が該当のコードです。 head.txt(utf-8)を読み書きしているので文字化けは起こりません。 #### 専ブラから開くローカルルール `/${bbs}/head.txt`(utf-8)を参照します。専ブラで使用する文字コードはShift_JISなので文字化けします。 #### 通常ブラウザ版の板トップページとスレ作成ページ `/static/board.js` と`/test/createthread.php`でJavaScriptを使用してincludeしています。 head.txt(utf-8)を読み込み、表示しているので文字化けは起こりません。 #### 1000000000.dat(専ブラのTL) head.txt(utf-8)を読み込み、index.jsonと合わせた後にShift_JISに変換しているので文字化けは起こりません。 ### どう修正するか 専ブラがShift_JISを扱う以上、head.txtはShift_JISにするしかありません。 それに合わせて各所を変更していきます。 ### 修正後の仕様 #### 管理画面での編集 `/test/operate/header.php`が該当のコードです。 head.txt(Shift_JIS)を読み取り、utf-8に変換してから表示します。(※この際に既存のutf-8のhead.txtは文字化けします) textareaで変更した文字列を保存する際にはShift_JISに変換してから保存します。 #### 専ブラから開くローカルルール `/${bbs}/head.txt`(Shift_JIS)を参照します。専ブラで使用する文字コードはShift_JISなので正しく表示されます。 #### 通常ブラウザ版の板トップページとスレ作成ページ `/static/board.js` と`/test/createthread.php`でJavaScriptを使用してincludeしています。 head.txt(Shift_JIS)を読み込み、utf-8に変換してから表示します。 #### 1000000000.dat(専ブラのTL) head.txt(Shift_JIS)を読み込み、utf-8に変換した後index.jsonと合わせます。 その後再度Shift_JISに変換するので文字化けは起こりません。 ※1000000000.datへの変更は任意のスレにレスすることで反映されます。 ## !addコマンドの文字数上限を追加 ### 概要 !addコマンドについて、追記可能な文字数の制限処理がなかったので追加しました。 また、将来コマンドを追加する機会に備えて、\>\>1の本文を\<hr\>で分けた上部に追記分を追加するような処理に変更しました。
konkon-fox added 2 commits 2023-10-16 17:58:11 +09:00
Author
Contributor

上記に説明した修正を行いました。
よろしければテストしてコードレビューをいただけると幸いです。
また、ご質問や別の修正案等があればどうぞお知らせください。

上記に説明した修正を行いました。 よろしければテストしてコードレビューをいただけると幸いです。 また、ご質問や別の修正案等があればどうぞお知らせください。
konkon-fox added 1 commit 2023-10-16 18:02:18 +09:00
kenmo-melon approved these changes 2023-10-16 21:33:54 +09:00
kenmo-melon left a comment
First-time contributor

一応気になった点だけ少しコメントしました。文字化けの処理についてはこれでいいと思います。動作確認はできていないので、どなたかお願いできるとありがたいです。!addの文字数制限についてはもう少し厳しめでいいかと思いましたが、私の一存で決めるようなことでもないので、ご意見いただけるとありがたいです。

一応気になった点だけ少しコメントしました。文字化けの処理についてはこれでいいと思います。動作確認はできていないので、どなたかお願いできるとありがたいです。`!add`の文字数制限についてはもう少し厳しめでいいかと思いましたが、私の一存で決めるようなことでもないので、ご意見いただけるとありがたいです。
static/board.js Outdated
@ -34,0 +35,4 @@
async function getLocalHtml (targetId, targetFile, isShiftJIS) {
try{
const response = await fetch(targetFile, {cache: 'no-store'});
if(!response.ok) throw new Error();
First-time contributor

try catchで囲うよりここで直接ファイルの取得に失敗しましたとかエラーを出してしまってもいいかなと思いました。現実的に、ほとんど失敗しないと思いますが...

`try catch`で囲うよりここで直接`ファイルの取得に失敗しました`とかエラーを出してしまってもいいかなと思いました。現実的に、ほとんど失敗しないと思いますが...
Author
Contributor

fetchはエラー判定があるのでtry catchで囲うのはほぼ必須ですね。
c88fbba6d5 でエラー時に利用者が分かりやすいようにそれぞれの欄に文章を表示させるように変更してみました。

`fetch`はエラー判定があるので`try catch`で囲うのはほぼ必須ですね。 https://git.3chan.cc/stat2/delightly-v2fork/commit/c88fbba6d50dc7203e1459f7ab2b81a3164a2ece でエラー時に利用者が分かりやすいようにそれぞれの欄に文章を表示させるように変更してみました。
konkon-fox marked this conversation as resolved
@ -52,2 +51,2 @@
$message .="<br><font class=\"add\" color=\"red\">※追記 {$DATE}</font>{$match[1]}";
}
if (preg_match("/\!add(.*)/", $_POST['comment'], $addMatches) && $number != 1) {
$commentMax = $authorized ? $SETTING['BBS_MESSAGE_COUNT'] * 3 : $SETTING['BBS_MESSAGE_COUNT'];
First-time contributor

* 3は長すぎませんか?

`* 3`は長すぎませんか?
Author
Contributor

設定値*3というのは承認済みユーザーの値で通常ユーザーは設定値が最大値となっています。
参考にしたコードはこのあたりです。39014c72d2/test/bbs-main.php (L368-L387)
元々の本文の長さ制限と同じ様に(>>1の本文の長さ)+(追記分の長さ)を制限しているので、妥当な値かと思いますがいかがでしょうか。

設定値*3というのは承認済みユーザーの値で通常ユーザーは設定値が最大値となっています。 参考にしたコードはこのあたりです。https://git.3chan.cc/stat2/delightly-v2fork/src/commit/39014c72d2ff719627c058b34599e8c964900852/test/bbs-main.php#L368-L387 元々の本文の長さ制限と同じ様に(\>\>1の本文の長さ)+(追記分の長さ)を制限しているので、妥当な値かと思いますがいかがでしょうか。
First-time contributor

なるほど、元々そういうコードがあったんですね

なるほど、元々そういうコードがあったんですね
konkon-fox marked this conversation as resolved
konkon-fox added 1 commit 2023-10-16 22:33:12 +09:00
Author
Contributor

c88fbba6d5
ブラウザ版でhead.txt、kanri.txtの取得を失敗した際に該当箇所にエラー文章を表示

こちら、kanri.txtではなくkokuti.txtの間違いです。

https://git.3chan.cc/stat2/delightly-v2fork/commit/c88fbba6d50dc7203e1459f7ab2b81a3164a2ece ブラウザ版でhead.txt、kanri.txtの取得を失敗した際に該当箇所にエラー文章を表示 こちら、kanri.txtではなくkokuti.txtの間違いです。
konkon-fox added 1 commit 2023-10-17 21:39:07 +09:00
SaturdayTheMsgr reviewed 2023-10-18 21:23:00 +09:00
SaturdayTheMsgr left a comment
Contributor

概ね良さそうですが気になる点をコメントさせていただきました

概ね良さそうですが気になる点をコメントさせていただきました
@ -990,1 +987,3 @@
$fp .= "告知欄<><>99/01/01 00:00:00 <>".$text2."<>\n";
$headText = file_get_contents($PATH."head.txt");
$headText = mb_convert_encoding($headText, 'UTF-8', 'SJIS-win');
$headText = preg_replace('/(\r\n|\r|\n)/', '', $headText);
Contributor
str_replace(array("\r\n","\r","\n"), '', $headText);

から

preg_replace('/(\r\n|\r|\n)/', '', $headText);

へ変更した理由は何かあるでしょうか

```php str_replace(array("\r\n","\r","\n"), '', $headText); ``` から ```php preg_replace('/(\r\n|\r|\n)/', '', $headText); ``` へ変更した理由は何かあるでしょうか
Author
Contributor

こちらは特に理由は無く、私の手癖でpreg_replaceに書き換えてしまっていたようです。
str_replaceの方がパフォーマンス的に良さそうなので 7bc2364a1f にて戻しました。

こちらは特に理由は無く、私の手癖で`preg_replace`に書き換えてしまっていたようです。 `str_replace`の方がパフォーマンス的に良さそうなので https://git.3chan.cc/stat2/delightly-v2fork/commit/7bc2364a1fca49a91fea2b0838b3c11e0c66944a にて戻しました。
konkon-fox marked this conversation as resolved
@ -2,3 +2,2 @@
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['edit'] == "yes") {
file_put_contents($PATH."head.txt", $_POST['head']);
file_put_contents($PATH."kokuti.txt", $_POST['head2']);
$newHeadText = mb_convert_encoding($_POST['head'], 'SJIS-win', 'UTF-8');
Contributor

この部分について、私の環境ではローカルルールに絵文字が含まれると文字化けするのですがどうでしょう

この部分について、私の環境ではローカルルールに絵文字が含まれると文字化けするのですがどうでしょう
Author
Contributor

ご指摘ありがとうございます。私の環境でも絵文字が文字化けしました。
mb_convert_encoding前に代替文字を指定していなかったことが原因と思われます。
922b573b4a にて該当の処理を追加しました。
もう一度お試しいただけますでしょうか。

ご指摘ありがとうございます。私の環境でも絵文字が文字化けしました。 `mb_convert_encoding`前に代替文字を指定していなかったことが原因と思われます。 https://git.3chan.cc/stat2/delightly-v2fork/commit/922b573b4a0123236dc79fe32c1ba3e416138bf7 にて該当の処理を追加しました。 もう一度お試しいただけますでしょうか。
Contributor

文字化け解消されましたね。修正ありがとうございました

文字化け解消されましたね。修正ありがとうございました
konkon-fox marked this conversation as resolved
konkon-fox added 2 commits 2023-10-18 23:23:45 +09:00
Author
Contributor

kenmo-melonさん、SaturdayTheMsgrさん、コードレビュー誠にありがとうございました。

kenmo-melonさん、SaturdayTheMsgrさん、コードレビュー誠にありがとうございました。
konkon-fox changed title from WIP: ローカルルールの文字化けを修正、!addコマンドの文字数上限を追加 to ローカルルールの文字化けを修正、!addコマンドの文字数上限を追加 2023-10-19 12:14:47 +09:00
konkon-fox added 1 commit 2023-10-19 21:57:36 +09:00
stat2 merged commit cc3d29bac6 into main 2023-10-20 17:38:21 +09:00
Owner

いつもありがとうございます。
動作確認しましたのでマージしました。

いつもありがとうございます。 動作確認しましたのでマージしました。
Sign in to join this conversation.
No description provided.