Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法将文本帧解码为UTF-8。_Php_Javascript_Sockets_Websocket - Fatal编程技术网

Php 无法将文本帧解码为UTF-8。

Php 无法将文本帧解码为UTF-8。,php,javascript,sockets,websocket,Php,Javascript,Sockets,Websocket,现在我一直在努力修复这个bug,但我找不到如何修复它,我已经搜索并找到了一个解决方案,但它并不是问题的解决方案 每次我在聊天应用程序中“进入一个房间”时,我都会与“无法将文本框解码为UTF-8”断开连接 我正在将所有命令发送到WebSocket服务器(在PHP中作为json) 我通过WebSocket(ws://…)发送的命令是: 我的php websocket服务器处理请求并发回导致问题的thid: {"command" : "NEWUSER","data" : { "mood" : "t

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

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

  • 我正在将所有命令发送到WebSocket服务器(在PHP中作为json)
我通过WebSocket(ws://…)发送的命令是:

我的php websocket服务器处理请求并发回导致问题的thid:

{"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 ) ) )

是不是因为WebSocket发回了URL的地址?或者问题出在哪里?

这听起来像是您正在使用的PHP WebSocket服务器中的一个bug。这表明服务器没有正确地构建WebSoT框架,它包含非UTF8数据,或者服务器将消息拆分为两个帧,并且UTF-8数据在多字节字符编码的中间被分割。
另外,您不需要
转义(encodeURIComponent(STRING))
JSON.stringify
的结果应该已经可以安全地作为WebSocket消息发送了。

这是一个老话题,但如果人们搜索类似的bug,我会在这里给出答案

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

我在网上搜索以找到答案,并尝试不同的回答,比如替换坏的utf8字符、使用encodeURI或使用unescape等等

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


因此,在为长度设置正确的endian顺序后,一切都会顺利进行。

我认为您不需要在这里转义或URI编码任何内容。使用
JSON.stringify
就足以将JSON对象发送到WebSocket服务器。好的,那么在这种情况下该怎么办?您使用的是哪个PHP WebSocket服务器?最好的方法可能是尝试另一个PHP WebSocket服务器和/或针对当前使用的服务器提交一个bug。
return unescape( encodeURIComponent( JSON.stringify( COMMAND ) ) )