Используйте JSON_UNESCAPED_UNICODE в laravel ресурса API

когда я хочу вернуть тексты в ресурс API, получаю следующий ответ:

{"data":{"message":"\u۰۶۳۳\u۰۶۴۴\u۰۶۲۷\u۰۶۴۵ \u۰۶۲۸\u۰۶۳۱ \u۰۶۲a\u۰۶۴۸"},"status":۰}

эта проблема решена в response()->json, когда я добавляю следующий код в ответ:

return 200, [], JSON_UNESCAPED_UNICODE

подобно:

return response()->json(['message' => 'my utf8 text'], 200, [], JSON_UNESCAPED_UNICODE);

но в ресурсе API я не могу добавить этот код в ответ

код ресурса API:

    public function toArray($request) {
        return [
            'id' => $this->id,
            'userId' => $this->user_id,
            'title' => $this->title,
            'text' => $this->text,
            'isAccepted' => $this->is_accepted,
            'viewCount' => $this->view_count,
            'likeCount' => $this->like_count,
            'dislikeCount' => $this->dislike_count,
            'commentCount' => $this->comment_count,
            'createdAt' => date('Y-m-d H:i:s' , strtotime($this->created_at)),
        ];
    }

    public function with($request) {
        return [
          'status' => Status::SUCCESS
        ];
    }

как я могу решить эту проблему?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
2 379
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете сделать это, используя setEncodingOptions при возврате JSON с вашего контроллера:

use Illuminate\Support\Facades\Response;

class MyController extends Controller {
    public function index() {
        $myJsonStructure = [
            'data' => '۶۲۷۶۴۸',
        ];
        // SET the bit flag in the encoding options
        // (default encoding options are:
        //  JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT = 15)
        $response = Response::json($myJsonStructure);
        return $response->setEncodingOptions(
            $response->getEncodingOptions() | JSON_UNESCAPED_UNICODE
        );
        // -OR- replace all encoding options with a set of my choosing
        return Response::json($myJsonStructure)
            ->setEncodingOptions(JSON_UNESCAPED_UNICODE | JSON_HEX_AMP);
    }
}
Ответ принят как подходящий

Попробуйте отредактировать функцию ниже в «Illuminate\Http\JsonResponse.php».

public function __construct($data = null, $status = 200, $headers = [], $options = 0)
{
    $headers = ['Content-Type' => 'application/json; charset=UTF-8',
        'charset' => 'utf-8'];
    $options = JSON_UNESCAPED_UNICODE;
    $this->encodingOptions = $options;

    parent::__construct($data, $status, $headers);
}

Я имею в виду, что один могу редактирует библиотечные классы, но это в конечном итоге обречено на провал, потому что требует делать одно и то же каждый раз, когда вы composer install или composer upgrade. Я считаю, что лучшим решением было бы добавить в приложение код, который настраивает или переопределяет поведение библиотеки.

amphetamachine 30.06.2020 16:21

Согласованный. Это не должен быть принятый ответ;)

Vladislav Rastrusny 07.09.2021 13:46

Другие вопросы по теме