Laravel 5.0 utf8转换?

时间:2015-08-06 05:35:49

标签: php mysql utf-8 laravel-5

我遇到了麻烦。

  

windows 8.1
  xampp 3.2.1
  php 5.4
  Laravel 5.1
  Lang utf8(日文)

MySQL的

character_set_client      utf8
character_set_connection  utf8
character_set_database    utf8
character_set_filesystem  binary
character_set_results     utf8
character_set_server      utf8
character_set_system      utf8
character_sets_dir        C:\xampp\mysql\share\charsets\

的php.ini

extension=php_mbstring.dll 

mbstring.language = Japanese 
mbstring.internal_encoding = UTF-8 
mbstring.http_input = auto 
mbstring.http_output = UTF-8 
mbstring.encoding_translation = On 
mbstring.detect_order = auto 
mbstring.substitute_character = none; 
mbstring.func_overload = 0 

插入动作

public function register(Request $request) {
$group = new Group;
$group->name = $request->name;
$group->remarks = $request->remarks;

$validator = $this->validator($request->all());
if ($validator->fails()) {
    $this->throwValidationException(
        $request, $validator
    );
}

$group->save();

return redirect()->guest('master/group');
}

查看插入标记

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

在这个源代码中,插入时没有问题。

但是,更新时会出现乱码。

更新行动

public function update(Request $request) { 
$group = Group::find($request->id); 
$group->name = $request->name; 
$group->remarks = $request->remarks; 
$group->user_id = $request->user_id; 

$validator = $this->validator($request->all()); 
if ($validator->fails()) { 
    $this->throwValidationException( 
        $request, $validator 
    ); 
} 

$group->save(); 

return redirect()->guest('master/group'); 
} 

我尝了几个。

  1. var_dump($request->name); // NG

  2. var_dump(utf8_encode($request->name)); // NG

  3. var_dump(utf8_decode($request->name)); //确定

  4. 更新时导致问题是否是正确的代码来执行utf8_decode ()

    什么,设置有什么不对?

1 个答案:

答案 0 :(得分:0)

请勿使用任何编码器/解码器。

而不是var_dump(),请SELECT col, HEX(col) FROM ... WHERE ...向我们展示输出。十六进制应该主要是6个十六进制数字的组:E8xxyy。 (空格为20。)

如果你没有这样的十六进制,那么数据就没有正确存储。否则,问题出在输出上。

要在PHP中查看十六进制:

$hex = unpack('H*', $text);
echo implode('', $hex);

再次查找大量E8xxyy。这将进一步缩小问题所在。