3

外部インターフェイスのコンテンツのエンコードに苦労しています。MySQLデータベースでは、照合はlatin1_swedish_ciです。また、フィールドの照合はistlatin1_swedish_ciです。phpスクリプトはUTF-8でエンコードされており、ブラウザーの出力からUTF-8が得られます。このデータベースのコンテンツを除いて、すべてが正常に機能しています。データベース接続はUTF-8(Typo3 4.7)である必要があり、内容は

straße

しかし、それはそうあるべきですstraße

mb_detect_encoding($data['street'],'UTF-8')と言いますUTF-8。私が使用する場合、私utf8_decode()は得る

stra�?e

私が使用する場合、私utf8_encode()は得る

straße

私の仮定では、UTF-8でエンコードされたデータはに格納されてISO-8859-1いますが、この場合、ここでそのような問題が発生することはありません。実際のエンコーディングが何であるかを知るにはどうすればよいですか?

PS:ソースのエンコーディングを変更できません!

私の最初の問題に対する私の解決策:

このコード行を使用して、datbase接続をUTF-8からISO-8859-1に設定する必要がありました

$res = $GLOBALS['TYPO3_DB']->sql_query("SET NAMES latin1");
4

3 に答える 3

3

文字ß 'LATINSMALL LETTER SHARP S'(U + 00DF)は、UTF-8バイト0xC30x9F、リンクされたサイトに従って存在します。

UTF-8(hex)0xC3 0x9F(c39f)

ISO-8859-1コードページレイアウトを見ると、これらのバイトは文字ÃとISO-8859-1コードページレイアウトで定義されていない文字を表しています。したがって、これはそうではありません。ISO-8859-1と一部重複するもう1つの一般的な文字エンコードは、Windows CP1252(ANSIとも呼ばれ、メモ帳にテキストファイルを保存するときにデフォルトで使用されます。代わりに[名前を付けて保存]を使用して上書きできます)。CP1252コードページのレイアウトを見ると、これらのバイトは文字Ãを表しており、Ÿ最初に取得しているものを確認します。

したがって、CP1252でエンコードされている可能性があります。

于 2013-03-25T17:55:51.807 に答える
2

「ß」として表示されるのは、実際には、「ß」のUTF-8エンコーディングを構成する2バイトの0xC3と0x9Fのwindows-1252(CP1252とも呼ばれます)の解釈です。しかし、これは、データが実際にはUTF-8でエンコードされており、windows-1252でエンコードされていると誤って解釈されることを意味しているようです。したがって、十分な注意を払って、UTF-8として単純に処理する必要があると思います。

于 2013-03-25T18:01:06.403 に答える
1

SQL接続で使用されている文字セットの確認に進むことをお勧めします。これは、データベースに定義する文字セットと必ずしも同じではありません。

PHPから

// Opens a connection to a MySQL server
$connection = mysql_connect ($server, $username, $password);
$charset = mysql_client_encoding($connection);
$flagChange = mysql_set_charset('utf8', $connection);
echo "The character set is: $charset</br>mysql_set_charset result:$flagChange</br>";

PHPMYADMINの内部

  1. データベースを開くinformation_schema
  2. テーブルを開くschemata
  3. mysqlデフォルトの照合を確認してください

ユーザー権限に応じて、これらのパラメーターを変更できる場合とできない場合があります。

上に示したように、ファイルに次の行を追加することで、mysqlの競合する文字セットの問題を解決しましたconnection.php(dbアクセスを使用するすべてのページの先頭で呼び出します)。

$flagChange = mysql_set_charset('utf8', $connection);
于 2013-12-04T20:48:28.860 に答える