14

照合が utf8_unicode_ci である MySQL テーブル (テーブルと列の両方) に格納されているフランス語のテキスト (「é」などのアクセント付き文字を含む) があり、HTML5 ページに出力したいと考えています。

HTML ページの文字セットは UTF-8 (< meta charset="utf-8" />) で、PHP ファイル自体は「BOM なしの UTF-8」としてエンコードされます (Windows では Notepad++ を使用します)。PHP5 を使用してデータベースを要求し、HTML を生成します。

ただし、出力ページでは、特殊文字 ("é" など) が文字化けして表示され、"�" に置き換えられます。

データベースを (phpMyAdmin 経由で) 参照すると、同じアクセント付きの文字が問題なく表示されます。

ここで何が欠けていますか?

(注: ページのエンコーディングを (Firefox の「Web 開発者」メニューから) ISO-8859-1 に変更すると、問題が解決します... PHP ファイルに直接現れる特殊文字を除いて、破損します。しかし、とにかく、私は「なぜ UTF-8 が機能するのかを理解せずにエンコーディングを変更するよりも、UTF-8 として機能しない理由を理解したいと思います。^^;)

4

6 に答える 6

34

私は以前に同じ問題を経験しました、そして私がしたことは次のとおりです

1)notepad ++(ほとんどすべてのエンコーディングに適応できます)またはeclipseを使用し、BOMなしでUTF-8で保存または開くようにしてください。

2)を使用して、PHPヘッダーにエンコーディングを設定しますheader('Content-type: text/html; charset=UTF-8');

3)PHPファイルの最初と最後の余分なスペースをすべて削除します。

4)すべてのテーブルと列のエンコーディングをPhpMyAdminまたはお持ちのmySQLクライアントにutf8mb4_general_ci設定します。utf8mb4_unicode_ci2つのエンコーディングの比較はここにあります

5)mysql接続文字セットをUTF-8に設定します(データベース接続にはPDOを使用します)

  PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
  PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8"

または、データをフェッチする前にSQLクエリを実行するだけです

6)メタタグを使用する<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

7)フランス語に特定の言語コードを使用する <meta http-equiv="Content-language" content="fr" />

8)html要素のlang属性を目的の言語に変更します

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

過去のプロジェクトで日本語のキャラクターを扱っていたので、以前はこの問題を解決するのに本当に苦労したので、これをさらに更新します

9)一部のフォントはクライアントPCで使用できません。CSSに含めるには、Googleフォントを使用する必要があります

10)PHPソースファイルをで終わらせないでください?>

ノート:

しかし、上記のすべてが機能しない場合は、本当に表示したい文字セットに応じてエンコーディングを調整してみてください。私にとっては、SHIFT-JISすべての日本語の文字を表示するように設定しましたが、実際に正常に機能します。しかし、使用UFT-8はあなたの優先事項でなければなりません

于 2012-12-29T17:01:44.810 に答える
18

これは私のために働く

  1. データベースを作成するutf8_general_ci
  2. ファイルをN++で次のように保存しますUTF-8 without BOM
  3. $mysqli->query('SET NAMES utf8');PHPファイルのデータベースへの接続の後に置きます
  4. HTML< meta charset="utf-8" />を入力します

完璧に動作します。

于 2012-12-29T17:01:27.627 に答える
2

php.ini default_charsetがUTF-8に設定されていない場合は、を使用しContent-typeてデータを定義する必要があります。ファイルの上部に次のヘッダーを適用します。

header("Content-type: text/html; charset=utf-8");

それでもエンコードに問題がある場合は、次のいずれかの原因が考えられます。

  • データベースサーバーの文字セットの問題(サーバーのエンコーディングを確認してください)
  • データベースクライアントの文字セットの問題(接続のエンコーディングを確認してください)
  • データベーステーブルの文字セットの問題(テーブルのエンコーディングを確認してください)
  • PHPのデフォルトのエンコーディングの問題(default_encodingparameters.iniのパラメータを確認してください)
  • マルチバイトの設定ミス(parameters.iniのmb_stringパラメータを参照)
  • 文字セットの<form>問題(utf-8として送信されていることを確認してください)
  • 文字セットの<html>問題(htmlファイルにenctypeが設定されていない場合)
  • 問題(Apacheによって間違ったContent-encoding:エンコーディングが送信される場合)。
于 2012-12-29T17:01:02.673 に答える
2

私はあなたがすでに答えを持っていることを知っています。それは素晴らしいことです。しかし奇妙なことに、これらの答えのどれも私の問題を解決しませんでした。同じ問題に遭遇する可能性のある他の人のために、私の答えを共有したいと思います。

多言語アプリケーションでのフランス語のアクセントに関して、OP と同じ問題もありました。

しかし、AJAX 呼び出しで (フランス語のアクセント付きの) データをセグメントとして渡さなければならなかったときに、初めてこの問題に遭遇しました。

はい、UTF8 で動作するようにデータベースを設定する必要があります。しかし、AJAX 呼び出しにはクエリ文字列 (私の場合は CodeIgniter を使用しているため、セグメント) が含まれていたため、フランス語のテキストを単純にエンコードする必要がありました。

クライアント側でこれを行うには、データで Javascript の encodeURI() 関数を使用します。

PHP でこれを逆にするにはurldecode($MyStr)、データを受け取った場所をパラメーターとして使用します。

お役に立てれば。

于 2016-07-25T04:49:55.060 に答える
1
  1. (php)ファイルに完全なフランス語の記号を入力します

  2. そのファイルをUTF-8として保存します

  3. 下の行をウェブサイトのヘッダーに貼り付けます

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

ページ(ファイル)は見栄えがするはずです。

よさそうな場合は、(SET_NAMES)の後のmysqlの動作についてここにアクセスしてください。

于 2012-12-29T17:02:04.530 に答える