Spa*_*gCS 12 php encoding laravel
当我转储我的模型的属性并且它具有重音时,它返回此"b"前缀
dump($venda_item->produto->nomeproduto); // b"teste téste"
Run Code Online (Sandbox Code Playgroud)
我的数据库设置为utf8和utf8_general_ci排序规则
Malformed UTF-8 characters, possibly incorrectly encoded当我在json中返回响应时,这会导致以下错误
$json_response = Response::json($response, $this->getStatusCode(), $headers);
Run Code Online (Sandbox Code Playgroud)
我发现,如果我死了并将记录转储到网络路线上,它显示正常 teste téste
Route::get('/', function () {
dd(App\Vendasitem::where('codigovi', 112685)->first()->produto->nomeproduto);
}
Run Code Online (Sandbox Code Playgroud)
否则,如果我在控制器或请求和我试过的其他文件中做同样的事情,它会继续使用"b"前缀返回给我
如果我像这样保存我的记录PROMO - VIRICAPS (GUARANá + POLIVIT) 60 CáPS - CAIXA 18 UND,dump($venda_item->produto->nomeproduto);它会返回带有重音的正确结果.
我的所有数据库,包括列都设置为utf8mb4和utf8mb4_unicode_ci
J. *_*ich -1
因此,看起来最好的选择是使用iconv为对象编写一个访问器:
public function getNomeprodutoAttribute($value) {
return iconv("utf-8", "utf-8//ignore", $value);
}
Run Code Online (Sandbox Code Playgroud)
除非您想重新编码整个数据库,但这可能不是一个选择。
传入的值将是数据库中的值(这是不幸的二进制数据)。然后你告诉它输入是 utf(它就是),输出是 utf8(我们想要的),但忽略 utf-8 不支持的字符。 //ignore可能在某些版本的库中工作,因此您只需执行以下操作,并希望获得最好的结果:
public function getNomeprodutoAttribute($value) {
return iconv("utf-8", "utf-8", $value);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
442 次 |
| 最近记录: |