laravel 5.1 从 mysql 返回乱码
laravel 5.1 retuns garbled charachers from mysql
我是 laravel 框架的新手。我使用 Homestead 作为我的开发环境,一切正常。问题是我将波斯语记录插入 mysql 数据库,当我在某些视图中 return 它们时,波斯语字符会出现乱码(例如“آذرشهر” return 编辑为“\u0622\u0630\u0631\u0634\u0647\u0631”)。
在使用 laravel 之前,我有一个类似的问题,使用 mysqli_set_charset 解决了。我的旧代码是这样的:
class MySQLDatabase {
private $connection;
public function __construct(){
$this->openConnection();
mysqli_set_charset($this->connection, 'utf8');
}
public function openConnection(){
$this->connection=mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
if(mysqli_connect_errno()){
die("Database connection failed:" .
mysqli_connect_error().
"(". mysqli_connect_errno().")"
);
}
}
我的 laravel 数据库配置文件是这样的:
'default' => env('DB_CONNECTION', 'mysql'),
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
.env 文件是这样的:
APP_ENV=local
APP_DEBUG=true
APP_KEY=XXXXXXXX
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
我该如何解决这个问题?
这是一个视图:
@extends('app')
@section('content')
<h1>شهر</h1>
@foreach($cities as $city)
{{ $city }}
@endforeach
@stop
生成的对象是这样的:
{"id":402,"city":"\u0622\u0630\u0631\u0634\u0647\u0631","province_id":1,"created_at":"-0001-11-30
00:00:00","updated_at":"-0001-11-30 00:00:00"}
其实这跟Laravel没有任何关系。问题是我试图 return 整个对象(即 {{$city}}
)到我的视图,而我应该 return 像这样的城市名称:{{$city->city}}
我是 laravel 框架的新手。我使用 Homestead 作为我的开发环境,一切正常。问题是我将波斯语记录插入 mysql 数据库,当我在某些视图中 return 它们时,波斯语字符会出现乱码(例如“آذرشهر” return 编辑为“\u0622\u0630\u0631\u0634\u0647\u0631”)。 在使用 laravel 之前,我有一个类似的问题,使用 mysqli_set_charset 解决了。我的旧代码是这样的:
class MySQLDatabase {
private $connection;
public function __construct(){
$this->openConnection();
mysqli_set_charset($this->connection, 'utf8');
}
public function openConnection(){
$this->connection=mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
if(mysqli_connect_errno()){
die("Database connection failed:" .
mysqli_connect_error().
"(". mysqli_connect_errno().")"
);
}
}
我的 laravel 数据库配置文件是这样的:
'default' => env('DB_CONNECTION', 'mysql'),
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
.env 文件是这样的:
APP_ENV=local
APP_DEBUG=true
APP_KEY=XXXXXXXX
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
我该如何解决这个问题?
这是一个视图:
@extends('app')
@section('content')
<h1>شهر</h1>
@foreach($cities as $city)
{{ $city }}
@endforeach
@stop
生成的对象是这样的:
{"id":402,"city":"\u0622\u0630\u0631\u0634\u0647\u0631","province_id":1,"created_at":"-0001-11-30 00:00:00","updated_at":"-0001-11-30 00:00:00"}
其实这跟Laravel没有任何关系。问题是我试图 return 整个对象(即 {{$city}}
)到我的视图,而我应该 return 像这样的城市名称:{{$city->city}}