Строка с префиксом "b" на записях с ударением - PullRequest
0 голосов
/ 13 февраля 2019

Когда я сбрасываю свойство моей модели с акцентом, оно возвращается с этим префиксом "b"

dump($venda_item->produto->nomeproduto); // b"teste téste"

Для моей базы данных задано сопоставление utf8 и utf8_general_ci

Это вызываетмне следующую ошибку Malformed UTF-8 characters, possibly incorrectly encoded когда я возвращаю ответ в json, в этой строке

$json_response = Response::json($response, $this->getStatusCode(), $headers);

Обновление

я обнаружил, что если я умру и дам запись записи в веб-маршрутон показывает нормально teste téste

Route::get('/', function () {
    dd(App\Vendasitem::where('codigovi', 112685)->first()->produto->nomeproduto);
}

в противном случае, если я делаю то же самое в контроллере или запросе и других файлах, которые я пробовал, он возвращает мне префикс "b"

Обновление 2

Если я сохраню свою запись следующим образом PROMO - VIRICAPS (GUARANá + POLIVIT) 60 CáPS - CAIXA 18 UND и dump($venda_item->produto->nomeproduto);, то получится правильный результат с акцентами.

Вся моя база данных, включая столбец, настроена на utf8mb4и utf8mb4_unicode_ci

Ответы [ 2 ]

0 голосов
/ 15 августа 2019

Используйте эту функцию

public function utf8ize($value) {
        if (is_array($value)) {
            foreach ($value as $k => $v) {
                $value[$k] = utf8ize($v);
            }
        } else if (is_string ($value)) {
            return utf8_encode($value);
        }
        return $value;
    }
0 голосов
/ 20 февраля 2019

Так что, похоже, вам лучше всего написать аксессор для объекта, используя iconv :

public function getNomeprodutoAttribute($value) {
   return iconv("utf-8", "utf-8//ignore", $value);
}

Если вы не хотите перекодировать весьбаза данных, которая, вероятно, не является опцией.

Переданное значение будет значением из базы данных (что является неудачными двоичными данными).Затем вы говорите ему, что вводом является utf (который он есть), и что выводом является utf8 (который мы хотим), но игнорировать символы, которые не поддерживаются в utf-8.//ignore может работать в некоторых версиях библиотеки, поэтому вам просто нужно сделать следующее и надеяться на лучшее:

public function getNomeprodutoAttribute($value) {
   return iconv("utf-8", "utf-8", $value);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...