0

现在我一直在努力修复这个错误,但我不知道如何修复它,我已经搜索并找到了解决方案,但这并不是解决问题的方法。

每次我在聊天应用程序中“进入房间”时,我都会因“无法将文本帧解码为 UTF-8。”而断开连接。

  • 我将所有命令发送到 WebSocket 服务器(在 PHP 中作为 json)

我通过 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?或者是什么问题?

4

2 回答 2

0

这听起来像是您正在使用的 PHP WebSocket 服务器中的一个错误。这表明服务器没有正确构造 WebSocket 帧,并且它包含非 UTF8 数据,或者服务器将消息拆分为两个帧,并且 UTF-8 数据在多字节字符编码的中间被拆分。

此外,您不需要escape(encodeURIComponent(STRING)). 的结果JSON.stringify应该已经可以安全地作为 WebSocket 消息发送。

于 2013-06-15T18:28:16.597 回答
0

这是一个古老的主题,但如果人们确实搜索类似的错误,我会在这里给出答案。

最近我遇到了一个 php websocket 服务器的问题,chrome 中的 javascript 客户端关闭了连接说“无法将文本帧解码为 UTF8”。

我在网上搜索以找到答案,并尝试了不同的响应,说替换坏的 utf8 字符,或使用 encodeURI 或使用 unescape 等......

但是在阅读了 websocket 规范的一部分之后,我检查了 php 服务器上的帧发送。我看到对于 126 字节以下的帧长度,它工作得很好,但是对于超过 126 字节的帧,它会在客户端产生错误。经过一点帧检查后,我看到帧的长度以小端顺序存储,或者基于规范中的示例,帧长度需要以大端顺序存储。

因此,在为长度设置正确的字节序后,一切正常。

于 2020-05-21T08:00:54.017 回答