Definiowanie kodowania odpowiedzi/pliku.

Definiowanie kodowania odpowiedzi/pliku.

Wątek przeniesiony 2021-04-30 11:09 z Webmastering przez Patryk27.

HI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1862
0

Witam.

Jak w Symfony mogę ustawić kodowanie odpowiedzi/pliku?

Mam coś takiego:

Kopiuj
$response = new Response($content);
$response->setCharset('ISO-8859-2');
$response->headers->set('Content-Encoding', 'ISO-8859-2');
$response->headers->set('Content-Type', 'text/csv; charset=ISO-8859-2');
$response->headers->set('Content-Disposition', 'attachment; filename="exportfile');
$response->headers->set('Filename', 'exportfile');

return $response;

Jednak zwracany plik jest ciągle w UTF-8.

Wyczytałem, że należy dodać na koniec

Kopiuj
$response->prepare();

ale u mnie kończy się to błędem:

Type error: Too few arguments to function Symfony\Component\HttpFoundation\Response::prepare(), 0 passed in /var/www/SaveFile.php on line 90 and exactly 1 expected

Natomiast gdy zrobię tak jak piszą w dokumentacji tj.

Kopiuj
$response->prepare($request);

To błędu nie ma, ale plik jest nadal w UTF-8.

Z góry dziękuję za pomoc.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
2

setCharset() itd. jedynie informują przeglądarkę czego ma się spodziewać - nie powodują automatycznej konwersji ciągów znaków na dany format.

(wizualnie: Content-Type: Japanese informuje przeglądarkę, że ma spodziewać się tekstu po japońsku, ale to na Tobie spodziewa odpowiedzialność, aby przypadkiem nie zrobić new Response('hello world!').)

Aby przekonwertować tekst z UTF8 na inny format, możesz wykorzystać funkcję iconv:

Kopiuj
$content = iconv('UTF8', 'ISO-8859-2', $content);

$response = new Response($content);
$response->setCharset('ISO-8859-2');
/* ... */
HI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1862
0

Dziękuję.

iconv działa jak należy.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.