3

ギリシャ語のデータベースを utf8 に変換しようとしています。この時点で、(iconv() 関数ではなく、MySQL を介して) 方法を理解しましたが、問題があります: アプリケーションはデータベースに大量のデータを PHP のシリアル化された形式で (serialize() を介して) 保存します。 .

ご存じのとおり、この形式では文字列の長さがシリアル化された文字列に格納されます。これは、変換後に長さが変更されるため (php5 は Unicode を適切にサポートしていないため)、これらの文字列をシリアル化解除できなくなることを意味します。

これまでのところ、これを回避するために次のいずれかのアプローチを使用することを検討しています。

  1. PHP を使用してこれらの文字列を utf8 に変換し、シリアル化された文字列全体を変換する代わりに、シリアル化を解除して配列内のすべての項目を変換します。
  2. シリアル化された文字列の長さを再計算するスクリプトを作成します。

オプション #2 の方が簡単に思えますが、これを行うためのより迅速な方法が必要であると考えています。私は間違いなくこの問題に直面した最初の人ではないので、それらを変換するための無料で入手可能なスクリプトでさえあるかもしれません. 何か案は?

前もって感謝します。

4

3 に答える 3

1

SHOW CREATE TABLEを実行し、TABLEのエンコーディングを確認します。次に、同じエンコーディングでデータベースに接続します(USE'そのエンコーディング';を実行します)。

これで、シリアル化された文字列unserialize()を取得するときにそれをunserialize()します。戻り値は、アプリケーションがserialize()に渡したものになります。

ここに到達したら、文字列が最初に挿入されたエンコーディング(ISO-8859-1、CP1252など)を知る必要があるため、utf-8に変換できます。

これで、しゃれを意図していないギリシャ語がutf-8文字列に変換されたので、データベースに戻すことができます。

シリアル化された文字列を使用してデータを格納しないように、データベースを再編成することを強くお勧めします。BLOBをデータベースに保存する場合は、BLOBをデータベースから移動して、ファイルシステムに保存することを検討してください。

幸運を。

于 2011-01-09T19:44:27.173 に答える
0

オプション#1はかなり簡単に聞こえ、エラーが発生しにくくなります。

おそらくシリアル化を解除してから、 array_walk_recursive() を使用して各文字列の変換を行うことができます

于 2011-01-09T19:30:14.417 に答える