0

データベースコンテンツを(PHPスクリプトを使用して)移行しようとしています。

コンテンツはCMSにコピーされ、データベースに書き込まれました。コピーされるコンテンツは、任意の文字エンコード方式(IS0 -...-14など)および任意のWebサイトからのものである可能性があります。

PHP CMSはUTF-8であるため、テキストボックスに貼り付けられた文字は、POSTされたときにUTF-8に変換されますが、Latin-1としてデータベースに書き込まれます(MSSQL db ...dbcharsetとquerycharsetboth latin-1 )。

私たちは、これをどのように元に戻すことができるか、またはPHPで可能かどうか(文字が完全にUTF-8になるようにするため)を必死に考えようとしています。

ロジックを取得できれば、PHPがそれを処理できない場合(おそらくcant、mb_shite、iconv)、C++で拡張機能を記述できます。

UTF-8の4バイト文字ストリーム(つまり、0-127 is..ect)で迷子になり続けます。

誰かアイデアがありますか?

これまで、PHPのord()関数を使用して、各文字のUnicode / Accii文字参照を生成しようとしました(ordはASCIIを返すことは知っていますが、128を超える文字番号を出力します。これは、ASCIIだけを意味する場合は奇妙だと思いました。または多分それはそれ自身を繰り返す)。

私の考えでは、latin1はUTF-8に戻すのに苦労し、Latin1(ISO -...-1)の1バイトのcharストリームが原因で黒いひし形になります。

4

1 に答える 1

3

がデータベースの 8 ビットのクリーン エンコーディングである場合latin1(これは MySQL にありますが、MSSQL については気にしないでください)、utf-8 文字列を再構築するために何もする必要はありません。データベースから PHP にプルすると、入力したのと同じバイト、つまり UTF-8 が返されます。

latin1がデータベースの 8 ビット クリーン エンコーディングでない場合、文字列は修復不可能なほど壊れています。これは、utf-8 文字列をデータベースに書き込んだ瞬間に、データベースが無効と見なした文字が削除または置換されたことを意味します。ここから回復する方法はありません。

于 2013-01-23T16:10:31.940 に答える