现在我一直在努力修复这个错误,但我无法找到解决方法,我已经搜索并找到了解决方案,但这并不是问题的解决方案。
每当我在聊天应用程序中“进入一个房间”时,我就会断开连接“无法将文本框架解码为UTF-8。”。
我通过WebSocket发送的命令(ws:// ....)是:
{"command": "roomchange", "data" : "14"}
我的php websocket服务器处理请求并发送回来导致问题:
{"command" : "NEWUSER","data" : { "mood" : "tired", "apartment" : "0","username" : "tester","seat_id" : "7","room_id" : "14","gender" : "male", "face" : "", "hair" : "http://xxx.dk/framework/gfxs/avatars/male/hair/d0fc74a351b05cae75258e93422c040e.png", "shoes" : "http://xxx.dk/framework/gfxs/avatars/male/shoes/00708715be7e7c007fca457eb5573637.png", "clothes" : "http://xxx.dk/framework/gfxs/avatars/male/shirts/9401f96ed9d6ad43c5d5ad7352e50de2.png"}}
也许这个:
{"command": "roombg","data" : { "id" : "14", "background" : "new.png", "name" : "Diskotek"}}
当我向php中的websocket服务器发送请求时,我有这个
return unescape( encodeURIComponent( JSON.stringify( COMMAND ) ) )
是否导致websockets发回URL?或者问题是什么?
答案 0 :(得分:0)
这听起来像是您正在使用的PHP WebSocket服务器中的错误。它表示服务器没有正确构造WebSocket框架并且它包含非UTF8数据,或者服务器将消息拆分为两个帧,并且UTF-8数据在多字节字符编码的中间被拆分。
此外,您不应该escape(encodeURIComponent(STRING))
。 JSON.stringify
的结果应该可以安全地作为WebSocket消息发送。
答案 1 :(得分:0)
这是一门古老的学科,但是如果人们确实搜索了类似的错误,我会在此处给出答案。
最近,我遇到了php websocket服务器的问题,Chrome中的javascript客户端关闭了连接,提示“无法将文本框架解码为UTF8”。
我搜索了网络以找到答案,并尝试了不同的回答,例如替换错误的utf8字符,或者使用encodeURI或使用unescape等。
但是在阅读了websocket规范的一部分之后,我检查了在php服务器上发送的框架。我发现对于长度小于126个字节的帧,它的工作效果很好,但是对于长度大于126个字节的帧,它在客户端产生了一个错误。 经过一点帧检查后,我发现帧的长度以小端顺序存储,或者基于规范中的示例,帧长度需要以大端顺序存储。
因此,按正确的字节序排列长度后,一切正常。