如何修复 laravel Seed 中的 UTF8?
How to fix UTF8 inside laravel Seed?
我正在尝试在我的新 laravel 项目中导入旧数据库。为了简单起见,一些条目是通过法语版的 MS Office 制作的,旧网站处理这些编码的方式非常糟糕。
有撇号、重音符号、奇怪的字符,单词必须使文本更漂亮...
在原始文件上,enca 告诉我 "Unknown encoding"
我试过 python-chardet,它告诉我 ISO-8859-7 (.88)
我用 ISO-8859-{1-15} 试过 iconv,结果没有用。
我决定启动 windows 并使用记事本 ++
将文件转换为 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
此时此刻,我在这个问题上花费的时间超过了我应该花的时间,但我不是那种会轻易放弃的人。我不确定该怎么做,所以我想是时候问了。
在给定字符串上尝试 运行 htmlentities,支持 UTF-8。
htmlentities($str, ENT_QUOTES, "UTF-8");
Laravel 也有一个名为 "e" 的内置方法,用于返回 htmlentity。所以你需要做的就是 运行:
'test1' => e("l’année"),
有关详细信息,请参阅 http://laravel.com/docs/5.1/helpers#method-e。
我正在尝试在我的新 laravel 项目中导入旧数据库。为了简单起见,一些条目是通过法语版的 MS Office 制作的,旧网站处理这些编码的方式非常糟糕。
有撇号、重音符号、奇怪的字符,单词必须使文本更漂亮...
在原始文件上,enca 告诉我 "Unknown encoding"
我试过 python-chardet,它告诉我 ISO-8859-7 (.88)
我用 ISO-8859-{1-15} 试过 iconv,结果没有用。
我决定启动 windows 并使用记事本 ++ 将文件转换为 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
我确保那两行在
的 mysql 数组中/app/config/database.php
'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
此时此刻,我在这个问题上花费的时间超过了我应该花的时间,但我不是那种会轻易放弃的人。我不确定该怎么做,所以我想是时候问了。
在给定字符串上尝试 运行 htmlentities,支持 UTF-8。
htmlentities($str, ENT_QUOTES, "UTF-8");
Laravel 也有一个名为 "e" 的内置方法,用于返回 htmlentity。所以你需要做的就是 运行:
'test1' => e("l’année"),
有关详细信息,请参阅 http://laravel.com/docs/5.1/helpers#method-e。