簡體   English   中英

大於/小於標志沒有逃脫

[英]greater/less than signs are not escaped

我試圖逃避服務器端(Node.js和Express.js)中包含更多/更少符號(<,>)的字符串,我在服務器端使用此代碼

socket.on('message', function(data) {
   data.message = data.message.replace(/\</g,"&lt;")   //for <
   data.message = data.message.replace(/\>/g,"&gt;")   //for >   
   io.in(socket.current_room).emit('message',{message :data.message, id: socket.id});
});

在客戶端(在socket.on('message')函數內)

output.innerHTML += `<div class="mymessage-container"><div class="mymessage"><p class="me">` + message + '</p></div></div>'

它替換了符號,但它將它們顯示為已替換,例如:用戶發送消息: <hello> ,消息將顯示為&lt;hello&gt; 我該如何解決? 謝謝!

只需在客戶端使用第二個replace - 並且您正在使用模板文字,因此您可以使用${}模式:

output.innerHTML += `<div class="mymessage-container"><div class="mymessage"><p class="me">${message.replace(/\&lt\;/g, "<").replace(/\&gt\;/g, ">")}</p></div></div>`

你得到的原因&lt;hello&gt; 是因為data.message.replace你傳遞的第二個參數是將找到的那個字符串。

你可以在這里找到關於替換的解釋。

如果你想把它留空,你可以做這個data.message = data.message.replace(/\\</g,"")

旁注:您不需要在<或>之前添加反斜杠,因為它不是特殊字符。 這對我來說很好用data.message.replace(/</g,"")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM