Skip to content

ラジオボタンとチェックボックスの値のマルチバイト対応を選択できるように修正 - #70

Merged
1000-x-t30 merged 9 commits into
mainfrom
fix/escape-sequence
Sep 26, 2025
Merged

1000-x-t30 merged 9 commits into
mainfrom
fix/escape-sequence

Conversation

@1000-x-t30

Copy link
Copy Markdown
Contributor

エスケープシーケンスですが、URIのエンコードなので値が長くなると文字量が多くなってしまうことが気になりました。
以下の記事を参考にハッシュ化にしようか悩んでいるのでご意見があればいただきたいです。
https://qiita.com/economist/items/768d2f6a10d54d4fa39f

<input type="checkbox" onChange={onEscapeSequence} checked={escapeSequence} id="escapesequence-checkbox" />
<label htmlFor="escapesequence-checkbox">
<i className="acms-admin-ico-checkbox" />
エスケープシーケンス

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@1000-x-t30
ラベルが 「エスケープシーケンス」だとなんのためのチェックボックスかよくわからないと感じました。
例えば、「マルチバイト文字をエスケープしてIDを生成する」など少し詳しめのラベルにするのはいかがでしょうか?

@uidev1116 uidev1116 Sep 25, 2025 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

マルチバイト文字をエスケープしてID属性を生成するのほうが良いかも

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@uidev1116
ありがとうざいます。その通りなのでラベルの案をいただきました!

@uidev1116

uidev1116 commented Sep 25, 2025 •

Copy link
Copy Markdown
Contributor

@1000-x-t30
実装お疲れ様です。

エスケープシーケンスですが、URIのエンコードなので値が長くなると文字量が多くなってしまうことが気になりました。
以下の記事を参考にハッシュ化にしようか悩んでいるのでご意見があればいただきたいです。
https://qiita.com/economist/items/768d2f6a10d54d4fa39f

自分は長くても実害がなければそのままでよい派であることは前提ですが、ID生成ロジックを変えるとしても提示していただいた記事だとHTTP 環境で crypto.subtle.digest メソッドが動かないようなのでこの記事の方法ではないほうが良いと思います。(カスタムフィールドメーカーは開発環境で使うことのが多いと思いますのでHTTPSでしか動かないのは困ってしまいます。)

@1000-x-t30

1000-x-t30 commented Sep 25, 2025 •

Copy link
Copy Markdown
Contributor Author

@uidev1116

@1000-x-t30 実装お疲れ様です。

エスケープシーケンスですが、URIのエンコードなので値が長くなると文字量が多くなってしまうことが気になりました。
以下の記事を参考にハッシュ化にしようか悩んでいるのでご意見があればいただきたいです。
https://qiita.com/economist/items/768d2f6a10d54d4fa39f

自分は長くても実害がなければそのままでよい派であることは前提ですが、ID生成ロジックを変えるとしても提示していただいた記事だとHTTP 環境で crypto.subtle.digest メソッドが動かないようなのでこの記事の方法ではないほうが良いと思います。(カスタムフィールドメーカーは開発環境で使うことのが多いと思いますのでHTTPSでしか動かないのは困ってしまいます。)

その通りですね...
ライブラリ(jssha?)があるようですが、入れるほどでもないと思うのでこのままにしておきます。
ありがとうございます。

@atsu666

atsu666 commented Sep 26, 2025

Copy link
Copy Markdown
Member

@uidev1116

@1000-x-t30 実装お疲れ様です。

エスケープシーケンスですが、URIのエンコードなので値が長くなると文字量が多くなってしまうことが気になりました。
以下の記事を参考にハッシュ化にしようか悩んでいるのでご意見があればいただきたいです。
https://qiita.com/economist/items/768d2f6a10d54d4fa39f

自分は長くても実害がなければそのままでよい派であることは前提ですが、ID生成ロジックを変えるとしても提示していただいた記事だとHTTP 環境で crypto.subtle.digest メソッドが動かないようなのでこの記事の方法ではないほうが良いと思います。(カスタムフィールドメーカーは開発環境で使うことのが多いと思いますのでHTTPSでしか動かないのは困ってしまいます。)

その通りですね... ライブラリ(jssha?)があるようですが、入れるほどでもないと思うのでこのままにしておきます。 ありがとうございます。

こちら現状だと、ASCII文字も変換されてしまうので、以下のようにASCII文字はそのままで、マルチバイト文字だけASCII文字に変換するのはいかがでしょうか。

変更前

return btoa(encodeURI(encodeURIComponent(input)))
    .replace(/=/g, '') // = 記号を除去
    .replace(/\+/g, '-') // + をハイフンに置換
    .replace(/\//g, '_'); // / をアンダースコアに置換

変更後

return Array.from(input)
    .map((ch) => {
      if (ch.charCodeAt(0) < 128) {
        // ASCII はそのまま
        return ch;
      } else {
        // 日本語など非ASCIIだけエンコード
        const encoded = btoa(encodeURIComponent(ch))
          .replace(/=/g, '') // = を除去
          .replace(/\+/g, '-') // + → -
          .replace(/\//g, '_'); // / → _
        return encoded;
      }
    })
    .join('');

@1000-x-t30

Copy link
Copy Markdown
Contributor Author

@atsu666

こちら現状だと、ASCII文字も変換されてしまうので、以下のようにASCII文字はそのままで、マルチバイト文字だけASCII文字に変換するのはいかがでしょうか。

ご指摘ありがとうございます。修正しました!

@atsu666 atsu666 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ありがとうございます!承認します。マージは任せます。

@1000-x-t30 1000-x-t30 self-assigned this Sep 26, 2025
@1000-x-t30
1000-x-t30 merged commit 7ef5171 into main Sep 26, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants