Вопрос:
У меня в таблице категорий есть следующее. Есть русские символы:
id name 1 Обувь
Обувь = Обувь
Я хочу получить “Obuv” в качестве русской символики на выходе.
echo Category::select(‘name’)->first();
Этот скрипт должен дать мне “Обувь” в качестве выхода, но я получаю
{ “Имя”: “ u041eu0431u0443u0432u044c”}
Что не так? Как я могу получить правильный результат? Если я напишу “Obuv” в базе данных, английский “Obuv” даст мне правильный результат в Laravel. В phpMyAdmin это дает мне русские символы без проблем. Проблема в Ларавеле.
Лучший ответ:
Вы выводите данные, повторяя свою модель Category которая выводится в JSON по умолчанию в Laravel. Это автоматически вытесняет многобайтовые символы Unicode после вывода по умолчанию. Когда вы запускаете json_encode(), вы можете JSON_UNESCAPED_UNICODE параметр JSON_UNESCAPED_UNICODE следующим образом:
$data = Category::select(‘name’)->first(); echo json_encode($data, JSON_UNESCAPED_UNICODE);
Однако я должен быть ясен. В вашей Category нет сохраненных в нем данных, экранирование происходит только при выходе в JSON. Если все, что вы делали это гарантируя, что вы получили правильные данные обратно из базы данных с помощью echo – ING, вы должны быть в незашифрованном виде.
Если вы ищете только исходный текст свойства name категории, вы должны иметь возможность выводить его так:
echo $data->name;
Для получения дополнительной информации см. Http://php.net/manual/en/function.json-encode.php и https://laracasts.com/discuss/channels/laravel/how-to-prevent-laravel-from-returning – escaped-json-data.