下载文件时如何修复奇怪的文件编码?

How to fix weird encoding of file while downloading it?

我正在尝试从以 base 64 编码的 postgresql 下载一个文件。该文件的内容在数据库中似乎是好的 bytea 但是当我用 [=24 下载它时它是不一样的=]:

我正在使用 PHP 5.6 和 symfony 2.8。我尝试在 base 64 中解码但没有成功。

$name = $file->getName();
$content = base64_decode(stream_get_contents($file->getContent()));
$contentType = $file->getContentType();
$response = new Response();
$response->headers->set("Cache-Control", "no-cache private");
$response->headers->set("Content-Description", "File Transfer");
$response->headers->set('Content-Type', $contentType);
$response->headers->set('Content-Disposition', 'attachment; filename="' . $name . '"');
$response->headers->set("Content-Transfer-Encoding", "binary");
$response->headers->set('Content-Length: ', strlen($content));
$response->sendHeaders();
$response->setContent($content);
return $response;

对于这个例子,我用记事本++创建了一个包含字符串“test”的文件。在数据库中它是这样显示的“dGVzdA==”。

当我下载文件并解码时,内容是这个“Ǯ8kθطw”,应该是“test”。

PGSQL 正在将我的文件转换为十六进制值。 它需要被解码。 而且,PQGSQL 响应的开头有一个“/”。它需要被删除。

以下是我处理的内容:

$content = base64_decode(hex2bin(
    substr(
        stream_get_contents(
            $file->getContent()
        )
    ,1)
));