2

Latin-1 が混在する UTF-8 エンコーディングのデータベースがあります。(そこが問題だと思います)

これは、文字がデータベースでどのように見えるかです。

Ä° (should be İ)
è

ヘッダーを設定すると

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

すると次のような文字が出てきます。

 İ
 �

ヘッダーを削除すると、データベースにそのまま出てきます。私は彼らがこのように出てくることを望みます:

 İ
 è

可能であれば、事後にPHPでこれを修正する方法を探しています。現時点では、データ自体を修正することはできません。それが正しいことです。

4

4 に答える 4

15

HTML 出力は単一のエンコーディングである必要があり、それを回避する方法はありません。これは、異なるエンコーディングのコンテンツを最初に HTML エンコーディングに変換する必要があることを意味します。iconvまたはでそれを行うことは可能mb_convert_encodingですが、解決しなければならない 2 つの問題があります。

  1. コンテンツの現在のエンコーディングを知る (または推測する) 必要があります
  2. どこでも手動でこれを行う必要があります

たとえば、理論的な解決策は、HTML エンコーディングとして UTF-8 を選択し、出力するすべての文字列に対してこれを行うことです。

$string = '...'; // from the database

// If it's not already UTF-8, convert to it
if (mb_detect_encoding($string, 'utf-8', true) === false) {
    $string = mb_convert_encoding($string, 'utf-8', 'iso-8859-1');
}

echo $string;

上記のコードは、UTF-8 以外のコンテンツが latin-1 でエンコードされていることを前提としています。これは、質問によると合理的です。

于 2013-04-23T09:25:47.753 に答える
2

おそらく、文字を正しく取得する接続文字セットとして utf8 を選択する必要があります。デフォルトのものは、必要な文字には適していない可能性があります.

詳細はこちらmysql_set_charset

于 2013-04-23T09:44:56.387 に答える