JS / 在blogger利用javascript偵測IP位址,判斷是否顯示”修改”與複製時是否增加”版權聲明”–ToChinese2(e)程式碼說明

在 「JS / 在blogger利用javascript偵測IP位址,判斷是否顯示”修改”與複製時是否增加”版權聲明”

使用NotebookLM做語音摘要,在內容有提到一段程式碼沒有在內文中說明

NotebookLM判斷應該是處理中文字元的程序,這點是沒有錯

這個函式主要是處理複製時,新增的版權內容,其中標點符號會被轉譯成Html字元實體參照,如下

"本文作者:莊生趣味" + "\n" + "本文連結:" + s + "\n" + "版權聲明:轉載請標明作者、連結與出處!"

wordpress沒有這個問題,在blogger不知道是什麼機制導致

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function ToChinese2(e) {
	//console.log(e);
	var code = e.split(/&#(\d+);/g);
	//console.log(code);
	var c = "";
	for (var i = 0; i < code.length; i++) {
		var d = String.fromCharCode(code[i]);
		//console.log(d);
		if (d == String.fromCharCode("a")) {
			//console.log("o");
			//console.log(code[i]);
			c = c + code[i];
			//console.log(c);
		} else {
			//console.log("x");
			c = c + d;
			//console.log(c);
		}
		//console.log(c);
		//alert(c);
	}
	return c;
}

 

程式碼基本流程是將文字內容傳入

然後根據 &#+數字+; 的格式利用正則表達式搭配 split 分割字串

這樣字串”本文作者&#65306;莊生趣味” + “\n” + “本文連結&#65306;” + s + “\n” + “版權聲明&#65306;轉載請標明作者&#12289;連結與出處&#65281;”

就會分割成陣列[“本文作者”,”65306″,”莊生趣味 本文連結”,”65306″,…..]

再用 String.fromCharCode(),如果參數是非數字,例如文字,會回傳空值的特性

透過判斷式來處理字串

當傳入文字,不需要轉換,直接串接字串

當傳入數字,利用String.fromCharCode()來取得 Unicode 字符,再串接字串

最終回傳串接完成的字串

 

這個方法式參考網站https://ascii.chacd.com/轉換編碼的程式

因為這個網站把程式直接寫在網頁內

利用瀏覽器的檢查功能,可以知道按下轉換按鈕會觸發 ToChinese()

 

在網頁內搜尋 ToChinese(),可以完整的程式碼

 

調整編排後的程式碼

1
2
3
4
5
6
7
8
9
function ToChinese(e) {
  console.log(e);
  var code = e.match(/&#(\d+);/g);
  console.log(code);
  var c = "";
  for (var i = 0; i < code.length; i++)
    c += String.fromCharCode(code[i].replace(/[&#;]/g, ""));
  console.log(c);
}

 

所以我用我的理解改成可以串接字串的函式

(印像中應該有參考其他網站資料,但是找不到了)

我後來把程式碼丟給chatGTP跟DeepSeek

請他們解釋我改寫的程式碼

他們都提到String.fromCharCode(“a”)有邏輯上的錯誤

但是他們都能夠理解這個程式想要達到的效果

所以給了相同的修改建議

兩者都是用 replace()將/&#(\d+);/g篩選出來的字串,利用String.fromCharCode()轉換成新字串

程式碼非常簡潔

chatGPT

1
2
3
4
5
function ToChinese2(e) {
  return e.replace(/&#(\d+);/g, function(match, dec) {
    return String.fromCharCode(parseInt(dec, 10));
  });
}

 

DeepSeek

1
2
3
4
5
function ToChinese2(e) {
  return e.replace(/&#(\d+);/g, function(m, code) {
    return String.fromCharCode(code);
  });
}