$this->sendJson() error: Malformed UTF-8 characters, possibly incorrectly encoded

Čamo
Člen | 786
+
0
-

Zdravím,

Prosím vás mám script ktorý cez curl stiahne pdf súbor a potom by som ho chcel ako json poslať do browsera ako ajax response. Curl prebehne správne a súbor sa stiahne a keď ho uložím na disk je v poriadku. Ale keď ho chcem tie isté dáta poslať ako json cez

$this->sendJson(['file' => $data])

tak dostanem error: Malformed UTF-8 characters, possibly incorrectly encoded

Vie mi niekto povedať v čom je problém? Ďakujem.

Editoval Čamo (15. 6. 2022 13:59)

Petr Parolek
Člen | 455
+
+1
-

Ahoj, používám PHP funkce base64_decode a base64_encode.

Čamo
Člen | 786
+
0
-

Čau, uplne som zabudol že to tu mám. Už som nejak vyriešil. Díky.

emololftw
Člen | 81
+
0
-

Čamo napsal(a):

Čau, uplne som zabudol že to tu mám. Už som nejak vyriešil. Díky.

A řešení prosím?

nightfish
Člen | 472
+
+2
-

@emololftw Formát JSON vyžaduje, aby řetězce v něm byly kódovány ve formátu Unicode. Ve webovém světě se pravděpodobně nejčastěji používá UTF-8. Data PDF souboru jsou binární data, která v UTF-8 nedávají smysl a nejsou validní. Když tedy chceš binární PDF data poslat JSONem, musíš je na jedné straně (v PHP skriptu tam, kde je sendJson()) převést na něco, co je s UTF-8 kompatibilní a na druhé straně převést zpět na binární data.

K tomu můžeš využít např. funkce base64_encode() na straně jedné a base64_decode() na straně druhé.

emololftw
Člen | 81
+
0
-

nightfish napsal(a):

@emololftw Formát JSON vyžaduje, aby řetězce v něm byly kódovány ve formátu Unicode. Ve webovém světě se pravděpodobně nejčastěji používá UTF-8. Data PDF souboru jsou binární data, která v UTF-8 nedávají smysl a nejsou validní. Když tedy chceš binární PDF data poslat JSONem, musíš je na jedné straně (v PHP skriptu tam, kde je sendJson()) převést na něco, co je s UTF-8 kompatibilní a na druhé straně převést zpět na binární data.

K tomu můžeš využít např. funkce base64_encode() na straně jedné a base64_decode() na straně druhé.

Děkuji mnohokrát. Důvod v mém případě byl nevalidní UTF-8 znak, který jsem se snažil poslat pomocí JSON.