Строка с префиксом "b" на записях с ударением - программирование

Строка с префиксом "b" на записях с ударением

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

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

В моей базе данных установлены параметры сортировки utf8 и utf8_general_ci

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

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

Обновить

Я обнаружил, что, если я умру и teste téste запись на веб-маршруте, он показывает нормальное 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 свою запись, как это PROMO - VIRICAPS (GUARANá + POLIVIT) 60 CáPS - CAIXA 18 UND и dump($venda_item->produto->nomeproduto); это возвращает мне правильный результат с акцентами.

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

4b9b3361

Ответ 1

Итак, похоже, что вам лучше всего написать аксессор для объекта, используя 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);
} 

Ответ 2

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

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;
    }