如何在laravel Seed中修复UTF8?

时间:2015-02-02 12:42:48

标签: php mysql laravel-4 utf-8 character-encoding

我试图在我的新laravel项目中导入一个旧数据库。为简单起见,一些条目是通过法语版的MS Office制作的,旧网站处理的编码效果非常差。

有撇号,重音符号,奇怪的字符必须使文字更漂亮...

  • 在原始文件上,enca告诉我"未知编码"

  • 我试过python-chardet,它告诉我ISO-8859-7(.88)

  • 我尝试使用ISO-8859- {1-15}的iconv,没有任何好处。

  • 我决定启动Windows并使用Notepad ++ 将文件转换为UTF8-no-bom。最终有了enca 认识到UTF-8,但实际上已经破坏了一半的角色。

  • 我已尝试在/etc/mysql/my.cnf中添加3个UTF8以下行 并且每次测试都是在有和没有它们的情况下完成的(评论/ 没有评论),到目前为止它还没有改变任何东西。

    collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8

  • 我确保这两行都在/app/config/database.php

    的mysql数组中

    'charset' => 'utf8', 'collation' => 'utf8_unicode_ci',

目前种子文件(简化)如下所示:

<?php
// app/database/seeds/ArticlesTableSeeder.php

class ArticlesTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('articles')->delete();
            Articles::create(array(
                     // ’ != ', I could do a str_replace but
                     // there are many similar characters spread everywhere
                    'test1'       => utf8_decode("l’année"), 
                    'test2'       => "l’année", 
                    'test3'       => "l’année"
                    ));

    }

}

一旦播种,这就是我在数据库中获得的内容:

test1 > l?ann
test2 > lâannée
test3 > lâannée // Same as test2

我做了这个测试输出:

print_r(utf8_encode($test1));
// l?ann
print_r(utf8_decode($test2));
// l?année
print_r($test3);
// l’année

我现在在这个问题上花了更多的时间来解决这个问题,但我并不是那种只是放弃的人。我不知道该怎么做,所以我觉得是时候问了。

2 个答案:

答案 0 :(得分:1)

尝试在给定字符串上运行htmlentities,支持UTF-8。

htmlentities($str, ENT_QUOTES, "UTF-8");

http://laravel.com/docs/4.2/helpers#strings

答案 1 :(得分:0)

Laravel还有一个内置的方法叫做&#34; e&#34;返回一个htmlentity。所以你需要做的就是运行:

'test1' => e("l’année"),

有关详细信息,请参阅http://laravel.com/docs/5.1/helpers#method-e