2017-11-13 9 views
0

まずは、英語があまり良くない場合は申し訳ありません。socket.emitに特殊文字を含むエラーがあります

私はsocket.ioとnodeJSでチャットをしようとしています:

  • は、ユーザーがノードのサーバーにメッセージを送信し、それらが接続されているすべてのクライアントに正しく送信されます。

  • メッセージは「履歴」変数に保存されるため、新しい接続では何が話されたかがわかります。

「¿」などの特殊文字が履歴varに格納されている場合が問題です。

ソースコード(サーバー):

var io = require('socket.io')(3333); 

var historico_mensajes = []; 

console.log('Iniciando aplicacion'); 

io.on('connection',function(socket) { 
    console.log('Nueva conexion'); 
    console.log(historico_mensajes); 

    socket.emit("chat_hist",{ historico_mensajes }); 

    socket.on('chat_msg',function(data){ 
     console.log("Msg no escapado: "+data.msg); 
     if(data.msg.length>150) { 
      socket.emit('sv_chat_msg', { 
       type: 'error', 
       msg: 'too long' 
      }); 
     } else { 
      io.sockets.emit('sv_chat_msg', { 
       type: 'chat', 
       msg: data.msg, 
       name: 'Test name', 
       icon: 'Test icon', 
       user: 'Test user', 
       rank: 'Test rank' 
      }); 
      historico_mensajes.push({ 
        type: 'chat', 
        msg: data.msg, 
        name: 'Test name', 
        icon: 'Test icon', 
        user: 'Test user', 
        rank: 'Test rank' 
      }); 
      if(historico_mensajes.length > 15) { historico_mensajes.splice(0,1); } 

     } 
    }); 
}); 

ソースコード(クライアント):

var HOST = "http://127.0.0.1:3333"; 
var SOCKET = null; 

$(document).ready(function() { 
    connect(); 
}); 

function connect() { 
    if (!SOCKET) { 
     console.log("Connecting to server..."); 
     SOCKET = io(HOST); 
     SOCKET.on('connect', function() { 
      console.log("Established connection!"); 
     }); 
     SOCKET.on('chat_hist', function(m=null) { 
      console.log("chat hist recibido"); 
      console.log(m); 
      /* 
      if(m) { 
       for (var ms = 0; ms < m.historico_mjs.length; ms++) { 
        chat("user", m.historico_mjs[ms].name, m.historico_mjs[ms].msg, m.historico_mjs[ms].icon, m.historico_mjs[ms].rank); 
       } 
      } else { 
       console.log("no historico"); 
      } 
      */ 
     });  
     SOCKET.on('sv_chat_msg', function(data) { 
      console.log("mensaje del server recibido para el usuario"); 
      switch(data.type) { 
       case "error": 
        chat('bot_errors','Test Bot',data.msg); 
        break; 
       case "chat": 
        chat('user',data.name,data.msg,data.icon,data.rank); 
        break; 
       default: 
        chat('bot','Test Bot','Unknow msg'); 
        break; 
      } 
     }); 
    } 
} 

if (!String.prototype.format) { 
    String.prototype.format = function() { 
     var args = arguments; 
     return this.replace(/{(\d+)}/g, function(match, number) { 
      return typeof args[number] != 'undefined' ? args[number] : match; 
     }); 
    }; 
} 

function chat(tipo,name,msg,avatar,rank){ 
    var toChat = ""; 
    if(msg && name) { 
     msg = msg.replace(/(<|>)/g, ''); 
     name = name.replace(/(<|>)/g, ''); 
     switch(tipo) { 
      case "bot": 
       toChat='<li><div class="comment-box"><header class="header"><span class="cmt-user-level">100</span><a href="#" data-show-profile="001"><img width="18px" src="images/crown.png" alt="user snap" /><em style="color:#ff8b00;">'+name+'</em></a></header><div class="text" style="color:#ff9800;">'+msg+'</div><span class="remove-comment"><i class="flaticon-remove-user"></i></span></div></li>'; 
       break; 
      case "bot_errors": 
       toChat='<li><div class="comment-box"><header class="header"><span class="cmt-user-level">100</span><a href="#" data-show-profile="001"><img width="18px" src="images/crown.png" alt="user snap" /><em style="color:#ff8b00;">'+name+'</em></a></header><div class="text" style="color:#a94442;">'+msg+'</div><span class="remove-comment"><i class="flaticon-remove-user"></i></span></div></li>'; 
       break; 
      case "user": 
       toChat='<li><div class="comment-box"><header class="header"><span class="cmt-user-level">'+rank+'</span><a href="#" data-show-profile="001"><img width="18px" src="'+avatar+'" alt="user snap" /><em>'+name+'</em></a></header><div class="text">'+msg+'</div><span class="remove-comment"><i class="flaticon-remove-user"></i></span></div></li>'; 
       break; 
     } 

     $("#chatArea").append(toChat); 
    } 
} 

例:

私は通常の文字を送信すると、すべてが正常に動作します:

enter image description here

[F5]キーを押した場合とチャットで配列を取得:

enter image description here

しかし...私は "¿" 文字セットでメッセージを送信する場合:今私は、F5キーを押すと

enter image description here

。 ...これは起こる:

enter image description here

私は何ができますか??コード以下F5を押し上

答えて

0

が実行されます

コードとその結果を得るために、上記のようなコードを使用screen.Pleaseに歴史を置く上記の完全な
SOCKET.on('chat_hist', function(m=null) { 
      console.log("chat hist recibido"); 
      console.log(m);//you fave commented code here 
      m && m.historico_mjs.forEach(data=>chat('user',data.name,data.msg,data.icon,data.rank);); 
     }); 

を。

関連する問題