Slim Framework v3中格式错误的UTF-8字符

时间:2016-12-16 20:35:43

标签: php mysql utf-8 slim utf8mb4

我使用 Slim Framework 进行了 API ,我从 MySQL 数据库获取数据,该数据库使用 utf8mb4_unicode_ci 进行编码。

当我编程时,我使用 PHP v7 。为了以正确的方式获取数据,我必须在 API 代码的顶部插入以下代码:

setlocale(LC_ALL, "pt_BR", "pt_BR.utf-8", "pt_BR.utf-8", "portuguese");
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_regex_encoding('UTF-8'); // I need it because I use mb_ereg_replace to replace with a regex in UTF-8.

这样,所有数据都以正确的方式返回,因此我不需要使用utf8_encodeutf8_decode函数。但是在官方服务器上安装后,它有 PHP v5.6 ,我得到了:

Slim Application Error
The application could not run because of the following error:

Details

Type: RuntimeException
Code: 5
Message: Malformed UTF-8 characters, possibly incorrectly encoded
File: Slim/Http/Response.php
Line: 318

我不知道如何修复它...我真的认为它是PHP v5.6的问题,也许?还是苗条的框架?或者还有另一种方法可以在PHP v5.6中使用 utf8mb4_unicode_ci 吗?!

修改

我做得很好,但当我看到更多关注代码问题的时候我正在调用strtotime函数,所以我尝试使用uft8_encodemb_*函数和还uft8_decode来修复问题,但没有任何效果,所以我不得不在我创建的另一个函数中删除重音。现在它一切顺利。

2 个答案:

答案 0 :(得分:2)

在我的index.php中,我写道:

$pdo = new PDO('mysql:host=localhost; dbname=dbname; charset=UTF8', user, pass);

它对我有用。

答案 1 :(得分:0)

访问“ src”文件夹,您将在其中找到“依赖项”文件。

查找行:

$pdo = new PDO ("mysql:host=" . $settings['host'] . ";dbname=" . $settings['dbname'],

添加到它:

  

。“ ;; charset = UTF8”

它看起来像这样:

$pdo = new PDO ("mysql:host=" . $settings['host'] . ";dbname=". $settings['dbname'].";charset=UTF8",