大于/小于符号未逃脱

时间:2019-05-30 13:09:44

标签: javascript node.js express

我正在尝试在服务器端(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;。 我该如何解决?谢谢!

2 个答案:

答案 0 :(得分:0)

仅在客户端使用第二个replace-您正在使用模板文字,因此可以使用${}模式:

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

答案 1 :(得分:0)

获得&lt;hello&gt;的原因是由于data.message.replace所传递的第二个参数是将为找到的那个字符串发生的字符串。

您可以找到here有关替换功能的说明。

如果您希望将其保留为空白,则可以执行此data.message = data.message.replace(/\</g,"")

旁注:您不必在<或>之前添加反斜杠,因为它不是特殊字符。这对我data.message.replace(/</g,"")很好。