如何修复 laravel Seed 中的 UTF8?

How to fix UTF8 inside laravel Seed?

我正在尝试在我的新 laravel 项目中导入旧数据库。为了简单起见,一些条目是通过法语版的 MS Office 制作的,旧网站处理这些编码的方式非常糟糕。

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

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

<?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

此时此刻,我在这个问题上花费的时间超过了我应该花的时间,但我不是那种会轻易放弃的人。我不确定该怎么做,所以我想是时候问了。

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

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

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

Laravel 也有一个名为 "e" 的内置方法,用于返回 htmlentity。所以你需要做的就是 运行:

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

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