如何解决Laravel将JSON数组存数据库时Unicode编码问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计302个文字,预计阅读时间需要2分钟。
(目录)+ 问题描述 + Model示例 + class UserModel extends Model { protected $table='tb_user'; protected $casts=[ 'alias'='array' ]; } + 直接存储alias字段,数据库会显示unicode码 + 问题解决方式:自定义属性class U
(目录)
问题描述
Model示例
class UserModel extends Model
{
protected $table = 'tb_user';
protected $casts = [
'alias' => 'array'
];
}
直接存alias 字段,数据库会显示unicode码
问题解决
方式一:自定义属性
class UserModel extends Model
{
public function setAliasAttribute($option)
{
$this->attributes['alias'] = json_encode($option, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}
}
方式二:继承覆写
class UserModel extends Model
{
protected $table = 'tb_user';
protected $casts = [
'alias' => 'array'
];
// 覆盖asJson方法
protected function asJson($value)
{
return json_encode($value, JSON_UNESCAPED_UNICODE);
}
}
方式三:trait复用
trait UnicodeJsonTrait
{
/**
* 序列化json
* @param $value
* @return false|string
*/
protected function asJson($value)
{
return json_encode($value, JSON_UNESCAPED_UNICODE);
}
}
直接在基类里使用(也可以在基类中覆写)
class BaseModel extends Model
{
use UnicodeJsonTrait;
}
继承基类
class UserModel extends BaseModel
{
protected $table = 'tb_user';
protected $casts = [
'alias' => 'array'
];
}
参考文章
- Laravel5Model$catstoarrayutf-8JSON_UNESCAPED_UNICODE
- PHP Laravel cast array 数据库存 json 时的 unicode 编码问题
本文共计302个文字,预计阅读时间需要2分钟。
(目录)+ 问题描述 + Model示例 + class UserModel extends Model { protected $table='tb_user'; protected $casts=[ 'alias'='array' ]; } + 直接存储alias字段,数据库会显示unicode码 + 问题解决方式:自定义属性class U
(目录)
问题描述
Model示例
class UserModel extends Model
{
protected $table = 'tb_user';
protected $casts = [
'alias' => 'array'
];
}
直接存alias 字段,数据库会显示unicode码
问题解决
方式一:自定义属性
class UserModel extends Model
{
public function setAliasAttribute($option)
{
$this->attributes['alias'] = json_encode($option, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}
}
方式二:继承覆写
class UserModel extends Model
{
protected $table = 'tb_user';
protected $casts = [
'alias' => 'array'
];
// 覆盖asJson方法
protected function asJson($value)
{
return json_encode($value, JSON_UNESCAPED_UNICODE);
}
}
方式三:trait复用
trait UnicodeJsonTrait
{
/**
* 序列化json
* @param $value
* @return false|string
*/
protected function asJson($value)
{
return json_encode($value, JSON_UNESCAPED_UNICODE);
}
}
直接在基类里使用(也可以在基类中覆写)
class BaseModel extends Model
{
use UnicodeJsonTrait;
}
继承基类
class UserModel extends BaseModel
{
protected $table = 'tb_user';
protected $casts = [
'alias' => 'array'
];
}
参考文章
- Laravel5Model$catstoarrayutf-8JSON_UNESCAPED_UNICODE
- PHP Laravel cast array 数据库存 json 时的 unicode 编码问题

