私は次の問題を抱えています: 非常に単純な php-mysqli クエリ:
if ( $result = $mysqli->query( $sqlquery ) )
{
$res = $result->fetch_all();
$result->close();
}
utf8_general_ci
データベース、テーブル、および列が照合されているにもかかわらず、文字列が西洋のエンコードされた文字列として誤ってエンコードされます。php スクリプト自体は utf-8 でエンコードされており、スクリプトの mysql を使用しない部分は正しいエンコーディングを取得します。つまりecho "ő"
、完全に機能すると言いますがecho $res[0]
、前の例からEF BF BD
、ファイルが正しい UTF-8 エンコーディングで表示されたときに文字が出力されます。ブラウザのエンコーディングを手動で西洋に切り替えると、西洋以外の文字が「?」に置き換えられることを除いて、mysqli ソースの文字列は適切にデコードされます。
さらに奇妙なのは、私の開発環境ではこれが起こっていないのに、私の Web サーバーでは起こっているということです。開発者環境は LAMP スタック (The Uniform Server) であり、Web サーバーは nginx を使用します。
この場合、phpMyAdmin を使用してデータベースにデータを入力すると、 phpmyadmin 内で完全に表示されます。phpMyAdmin の照合も utf-8 です。問題はこのあたりのどこかにあるに違いないと思います.同じWebサーバーのように、phpを介して(POSTを使用して)データを入力する他のサイトでは、同じ問題は発生しません. その場合、データは入力中と表示中の両方で正しく表示されますが (php で生成された Web ページを意味します)、特殊文字は phpMyAdmin で正しくありません。
どこからデバッグを開始するのを手伝ってもらえますか? php、mysql、nginx、またはphpMyAdminに接続されていますか?