swoft icon indicating copy to clipboard operation
swoft copied to clipboard

websocket请求cookie中存在特殊字符导致json::encode异常

Open zarte opened this issue 5 years ago • 2 comments

	ERROR	php_swoole_server_rshutdown (ERRNO 503): Fatal error: Uncaught ErrorException: Uncaught InvalidArgumentException: json_encode error: Malformed UTF-8 characters, possibly incorrectly encoded in /mnt/vdc/wwwroot/dbbackweb/swoft/vendor/swoft/stdlib/src/Helper/JsonHelper.php:58
Stack trace:
#0 /mnt/vdc/wwwroot/dbbackweb/swoft/vendor/swoft/websocket-server/src/Connection.php(223): Swoft\Stdlib\Helper\JsonHelper::encode(Array)
#1 /mnt/vdc/wwwroot/dbbackweb/swoft/vendor/swoft/framework/src/Concern/AbstractSessionManager.php(83): Swoft\WebSocket\Server\Connection->toString()
#2 /mnt/vdc/wwwroot/dbbackweb/swoft/vendor/swoft/websocket-server/src/Swoole/HandshakeListener.php(81): Swoft\Concern\AbstractSessionManager->set('2152', Object(Swoft\WebSocket\Server\Connection))
#3 {main}
  thrown in /mnt/vdc/wwwroot/dbbackweb/swoft/vendor/swoft/stdlib/src/Helper/JsonHelper.php:58
Stack trace:
#0 /mnt/vdc/wwwroot/dbbackweb/swoft/vendor/swoft/error/src/DefaultErrorDispatcher.php(64): Swoft\Error\DefaultErrorDispatcher->handleError(1, 'Uncaught Invali...', '/mnt/vdc/wwwroo...', 58)
 in /mnt/vdc/wwwroot/dbbackweb/swoft/vendor/swoft/stdlib/src/Helper/JsonHelper.php on line 58

这个异常如何捕获并通过websocket返回?

zarte avatar Sep 10 '20 03:09 zarte

swoft 多少版本的? cookies 里是怎样的数据,给个示例

inhere avatar Sep 10 '20 04:09 inhere

@inhere 2.0.8 对应的cookie删掉了

 public static function encode($value, int $options = 0, int $depth = 512): string
    {
        $json = json_encode($value, $options, $depth);

        if (JSON_ERROR_NONE !== json_last_error()) {
            var_dump($value);
            throw new InvalidArgumentException('json_encode error: ' . json_last_error_msg());
        }

        return $json;
    }

这里打印的值

zarte avatar Sep 10 '20 05:09 zarte