когда я хочу вернуть тексты в ресурс 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
];
}
как я могу решить эту проблему?






Вы можете сделать это, используя 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. Я считаю, что лучшим решением было бы добавить в приложение код, который настраивает или переопределяет поведение библиотеки.