去掉`btoa` /`atob`

master
chenanghui 3 weeks ago
parent e44493addd
commit a296f8a9fe
  1. 16
      assets/script/manager/RankBoardManager.ts

@ -997,15 +997,13 @@ export class RankBoardManager {
/**
* 授权昵称转 UTF-8 Base64,避免特殊字符破坏存档。
* 抖音等小游戏环境无 btoa,用自实现兜底。
* 不依赖 btoa/atob(抖音等小游戏环境没有),统一走自实现。
* @returns 编码结果;失败返回空串
*/
private static _encodeNick(nick: string): string {
if (!nick) return '';
try {
const binary = this._utf8ToBinary(nick);
if (typeof btoa === 'function') return btoa(binary);
return this._base64Encode(binary);
return this._base64Encode(this._utf8ToBinary(nick));
} catch (e) {
console.warn('[RankBoardManager] 昵称 Base64 编码异常', e);
return '';
@ -1020,7 +1018,7 @@ export class RankBoardManager {
if (!raw) return '';
if (!this._isBase64Text(raw)) return raw;
try {
const binary = typeof atob === 'function' ? atob(raw) : this._base64Decode(raw);
const binary = this._base64Decode(raw);
if (!binary) return raw;
const text = this._binaryToUtf8(binary);
// 解码出控制字符/替换符说明不是有效编码昵称(误判的明文),按明文返回
@ -1032,7 +1030,7 @@ export class RankBoardManager {
}
}
/** latin1 字符串(每字符码 0-255)转 Base64;自实现兜底,不依赖 btoa */
/** latin1 字符串(每字符码 0-255)转 Base64;纯手写实现,不依赖 btoa */
private static _base64Encode(binary: string): string {
const CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
let out = '';
@ -1056,7 +1054,7 @@ export class RankBoardManager {
return out;
}
/** Base64 转 latin1 字符串;自实现兜底,不依赖 atob。非法输入返回空串 */
/** Base64 转 latin1 字符串;纯手写实现,不依赖 atob。非法输入返回空串 */
private static _base64Decode(b64: string): string {
const CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
const lookup: Record<string, number> = {};
@ -1098,7 +1096,7 @@ export class RankBoardManager {
return true;
}
/** UTF-8 字符串转 latin1 二进制(供 btoa) */
/** UTF-8 字符串转 latin1 二进制(供 _base64Encode) */
private static _utf8ToBinary(text: string): string {
const encoded = encodeURIComponent(text);
let binary = '';
@ -1114,7 +1112,7 @@ export class RankBoardManager {
return binary;
}
/** latin1 二进制转 UTF-8 字符串(供 atob 结果) */
/** latin1 二进制转 UTF-8 字符串(供 _base64Decode 结果) */
private static _binaryToUtf8(binary: string): string {
let pct = '';
for (let i = 0; i < binary.length; i++) {

Loading…
Cancel
Save