2025/06/09

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);
});
}





 

 

0 comments:

張貼留言