我试图在我的新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
'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
我现在在这个问题上花了更多的时间来解决这个问题,但我并不是那种只是放弃的人。我不知道该怎么做,所以我觉得是时候问了。
答案 0 :(得分:1)
尝试在给定字符串上运行htmlentities,支持UTF-8。
htmlentities($str, ENT_QUOTES, "UTF-8");
答案 1 :(得分:0)
Laravel还有一个内置的方法叫做&#34; e&#34;返回一个htmlentity。所以你需要做的就是运行:
'test1' => e("l’année"),
有关详细信息,请参阅http://laravel.com/docs/5.1/helpers#method-e。