web-dev-qa-db-ja.com

PHP + MySQLを使用したutf-8エンコーディングの問題

データをMySQL 4(元々はlatin2 encodingに設定されていました)からMySQL 5に移動し、エンコーディングをutf-8に設定しました。 phpMyAdminは見栄えがよく、utf-8は問題ありません。ただし、ウェブサイトには一部の文字ではなく疑問符があります。 Webサイトのエンコードもutf8に設定されているため、問題の場所がわかりません。

[〜#〜] php [〜#〜]および[〜#〜] html [〜#〜]ファイルもtf8に設定されます。

何も思いつきません...

17
Adriana

クエリを試す

SET NAMES utf8

アプリケーションのクエリの前

29
Valentin Golev

私のサーバーでは、これらを私のphpファイルに追加しても効果がありませんでした。

ini_set('default_charset','utf-8');
mysql_set_charset('utf8');
header('Content-type: text/html; charset=utf-8');

しかし、これをphpファイルの先頭に追加すると、すべてが完全に機能しました。

$mysqli->query("SET NAMES 'utf8'");

注:データベースではutf8_general_ciのエンコーディングを使用していますが、utf8_unicode_ciも同じように機能します。

お役に立てば幸いです。

19
Jonathan Cross

MySQL接続をUTF-8に設定してみてください。

SET NAMES 'utf8'

サーバーに他のデフォルト設定がある場合に備えて、明示的なUTF-8ヘッダーを送信します。

header('Content-type: text/html; charset=utf-8');
13
Franz

PHPおよびHTMLファイルをutf-8に設定する必要はありません。

出力エンコーディングをUTF-8に設定するだけで、ブラウザが適切に表示されます。

HTML:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

PHPの場合:

header('Content-Type: text/html; charset=UTF-8');

MySQLテーブルからUTF-8である文字列を取得すると、エンコーディングを変換しない限り、ブラウザ出力までずっとUTF-8になります。それはブラウザがそれを解釈する方法です。

3
mauris

WebサイトにUTF8文字を表示し、ブラウザにそれらをLatin1(またはLatin2)として解釈するように指示すると、次のような意味不明な文字が表示されます:ß

Latin1(またはLatin2)の文字をWebサイトに表示し、ブラウザーにそれらをUTF8として解釈するように指示すると、疑問符が表示されます。

つまり、すべてをUTF8に切り替えた(つまり、DBエンジン、Webサーバー、およびブラウザーにUTF8を使用することを伝えた)と思いますが、実際には文字列をUTF8に変換していません。

@Darkerstarが言ったことをしてください。ダンプをUTF8に変換し(Notepad ++で簡単に実行できます)、再度インポートします。

2
mysql_query("SET NAMES UTF8");

「connection.php」の最後にこの行を追加すると、問題が解決しました。

私の接続ファイルの完全なコードは:

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_test = "localhost";
$database_test = "test";
$username_test = "username";
$password_test = "password";
$test = mysql_pconnect($hostname_test, $username_test, $password_test) or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_query("SET NAMES UTF8");
?>

私のデータベース照合は「utf8_general_ci」です。

ページは、「dreamweaverのデフォルトのutf8」と「Unicode正規化形式= C(正規分解)」です。

2
Fahri Akar

次のコンテンツを含む.htaccessファイルをWebサイトのルートに配置します:AddDefaultCharset UTF-8

そして

dbへの接続後に設定したdbconfigで:

mysql_query( "設定名 'utf8'");

2

ここに修正があります。ヘッダーをheader ('Content-type: text/html; charset=utf-8');に設定し、utf8_decode($content)を使用してコンテンツを印刷します。それを機能させるには、2つが必要です。

2
Rokhayakebe

MySQLですべてのSQLデータベース、テーブル、フィールドをUTF-8に設定するようには見えず、十分です。とてもうるさい。

エンコーディングの問題を解決するために問題を強制することになりました:

これを使用しなければなりませんでしたデータベースを開くすべての場所:$ db-> set_charset( "utf8");

そしてそれはうまくいった。最後に。

1
user3314053

最近この問題が発生しました(同じ問題が発生していることを願っています)。さまざまな方法を試しましたが、最終的には簡単に機能しました。

ダンプしたSQLファイルをUTF-8形式に変換してからインポートします。

BW:変換にはNotepad ++を使用しました。

1
Darkerstar