我使用 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_encode
或utf8_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_encode
,mb_*
函数和还uft8_decode
来修复问题,但没有任何效果,所以我不得不在我创建的另一个函数中删除重音。现在它一切顺利。
答案 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",