当我转储模型的属性并且带有重音符号时,它会返回此“ b”前缀
dump($venda_item->produto->nomeproduto); // b"teste téste"
我的数据库设置为utf8和utf8_general_ci排序规则
当我在此行以json返回响应时,会导致以下错误Malformed UTF-8 characters, possibly incorrectly encoded
$json_response = Response::json($response, $this->getStatusCode(), $headers);
我发现,如果我死了并将记录转储到网络路由上,它将显示正常的teste téste
Route::get('/', function () {
dd(App\Vendasitem::where('codigovi', 112685)->first()->produto->nomeproduto);
}
否则,如果我在控制器或请求以及我尝试过的其他文件中执行相同的操作,则会不断返回带有“ b”前缀的信息
如果我像这样PROMO - VIRICAPS (GUARANá + POLIVIT) 60 CáPS - CAIXA 18 UND
和dump($venda_item->produto->nomeproduto);
保存记录,它将为我返回带有重音符号的正确结果。
我的所有数据库(包括列)均设置为utf8mb4
和utf8mb4_unicode_ci
答案 0 :(得分:1)
如果您已经确认数据库上的编码。看看config/database.php
,字符集和归类的专有性。
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci'
如果问题在“打印件”上,则可以使用utf8_encode
函数。
{{utf8_encode($yourVar)}}
答案 1 :(得分:0)
从其他数据库导入数据时遇到了这个问题。用这种方法解决了,也许对您有用。
public function fixEncoding($str) {
return mb_check_encoding($str, 'UTF-8')
? html_entity_decode($str)
: utf8_encode(html_entity_decode($str));
}
答案 2 :(得分:-2)
因此,看来最好的选择是使用write a accessor来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);
}
答案 3 :(得分:-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;
}