4 回答

TA貢獻1802條經驗 獲得超4個贊
雙反斜杠應該是單反斜杠。一個反斜杠轉義了后面的字符,所以你用雙倍做的是轉義第二個反斜杠。它阻塞了 href,因為后面的引號結束了字符串,之后解析器將 url 中的“h”作為原始字符命中。
{ message: "...our website <a href=\\"https://test.com\\">here</a>" }
// ^ parser thinks the string ends here
// and doesn't know what to make of
// https://...
我的猜測是數據被兩個不同的進程轉義了兩次(或者同一個進程運行了兩次)。
假設示例:數據被創建,并在進入數據庫的過程中被轉義。所以現在所有引號前面都有一個反斜杠。然后對數據進行編輯并在數據庫中更新記錄,然后再次運行轉義。但是輸入字符串從第一次開始就已經包含反斜杠,并且因為反斜杠本身很特殊并且需要轉義,所以當字符串在返回數據庫的途中(再次)轉義時,您最終會得到雙反斜杠。
您可以通過在控制臺中對字符串進行兩次轉義來看到這種情況。(這不是反斜杠,但它說明了問題):
const input = '"This string is quoted."';
const once = encodeURI(input);
// encodes the quotes as '%22'
// "%22This%20string%20is%20quoted.%22"
const twice = encodeURI(once);
// encodes the '%' in '%22' as '%25', and you end up with `%2522`
// "%2522This%2520string%2520is%2520quoted.%2522"

TA貢獻1795條經驗 獲得超7個贊
使用模板字符串保存數據。
const json = `{"subtitle":"Information","desc":"Hi, Welcome.\\n<br><br>\\nYou can access our website <a href=\\"https://test.com\\">here</a>.\\n<br><br>\\nDont forget, cost: only $2!\\n<br>\\n<br>\\n<br>\\n<br>\\n Thankyou,<br>\\n Regards"}` console.log(JSON.parse(json))

TA貢獻1883條經驗 獲得超3個贊
json 中的雙引號(值)只需要一個正斜杠(\)。所以你的json應該是
{"subtitle":"Information","desc":"Hi, Welcome.\\n <br><br>\\n You can access our website <a href=\"https://test.com\">here</a>.\\n <br><br>\\n Dont forget, cost: only $2! \\n <br>\\n <br>\\n <br>\\n <br>\\n Thankyou,<br>\\n Regards"}

TA貢獻1824條經驗 獲得超5個贊
非常感謝您的所有回答。有助于找出由雙反斜杠引起的解析失敗,雙反斜杠轉義了第二個反斜杠而不是雙引號"
。
數據有雙反斜杠,因為這是來自克隆數據庫的數據,我認為它發生在轉換為 SQL 文件的過程中。
添加回答
舉報