我正在尝试在服务器端(Node.js和Express.js)中转义包含大于/小于符号(<,>)的字符串,并且我在服务器端使用此代码
socket.on('message', function(data) {
data.message = data.message.replace(/\</g,"<") //for <
data.message = data.message.replace(/\>/g,">") //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>
,消息将显示为<hello>
。
我该如何解决?谢谢!
答案 0 :(得分:0)
仅在客户端使用第二个replace
-您正在使用模板文字,因此可以使用${}
模式:
output.innerHTML += `<div class="mymessage-container"><div class="mymessage"><p class="me">${message.replace(/\<\;/g, "<").replace(/\>\;/g, ">")}</p></div></div>`
答案 1 :(得分:0)
获得<hello>
的原因是由于data.message.replace所传递的第二个参数是将为找到的那个字符串发生的字符串。
您可以找到here有关替换功能的说明。
如果您希望将其保留为空白,则可以执行此data.message = data.message.replace(/\</g,"")
。
旁注:您不必在<或>之前添加反斜杠,因为它不是特殊字符。这对我data.message.replace(/</g,"")
很好。