2016-12-16 16 views
0

私はスリムフレームワークAPIを行なったし、私はutf8mb4_unicode_ciでエンコードされのMySQLデータベースからデータを取得します。不正なUTF-8文字

私がプログラミングしていたとき、私は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のバージョン5での問題だと思う...それを修正する方法がわかりません。 6、多分?またはスリムフレームワーク?または、PHP v5.6でutf8mb4_unicode_ciを使用する別の方法がありますか?

EDIT

私はすべての権利でしたが、私はのstrtotime関数を呼び出すした問題をコーディングするためにもっと注意を探していたとき、私はuft8_decodeuft8_encodemb_*機能を使用しようともしました問題を解決するには何も効果がなかったので、私が作成した別の関数でアクセントを取り除かなければならなかった。今はうまく働いています。私のindex.phpで

+0

このエラーは何を生成しますか?エンコードコードはいいですが、もっと情報が必要です – Machavity

+0

'mb_ *'ルーチンへのすべての呼び出しを取り除きます。それから、 "ベストプラクティス"をチェックしてください。http://stackoverflow.com/a/38363567/1766831 –

+0

@Machavity @Rick James私は大丈夫でしたが、私がコードにもっと注意を払うと、私がstrtotime私は 'uft8_encode'、' mb_ * '関数と' uft8_decode'を使って問題を解決しようとしましたが、何も働かなかったので、作成した別の関数でアクセントを取り除かなければなりませんでした。今はうまく働いています。 – itscaiqueck

答えて

0

私が書いた:

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

それは私のために働きました。

+1

答えに元の質問との関連性のような説明を追加してください –