0

我们正在尝试迁移数据库内容(使用 PHP 脚本)。

内容已复制到 CMS 中,然后写入数据库。复制的内容可以来自任何字符编码方案(例如 IS0-...-14)和任何网站。

PHP CMS 是 UTF-8,因此粘贴到文本框中的字符在 POST 时将转换为 UTF-8,然后作为 Latin-1 写入数据库(MSSQL db...db charset 和 query charset 都是 latin-1 )。

我们正在拼命思考如何在 PHP 中扭转这种情况,或者甚至可能(得到它,使字符完全是 UTF-8)。

如果我们能得到逻辑,我们可以用 C++ 编写一个扩展,如果 PHP 不能处理它(它可能不能,mb_shite 和 iconv)。

我一直迷失在 UTF-8 4 字节字符流中(即 0-127 is..ect)。

有人有什么想法吗?

到目前为止,我们已经使用 PHP 的 ord() 函数尝试为每个 char 生成一个 Unicode/Acsii char ref(我知道 ord 返回 ASCII,但它打印超过 128 个字符编号,我认为如果它只是 ASCII 的话很奇怪,或者它可能会重复自己)。

我的想法是 latin1 将难以转换回 UTF-8,并且由于 Latin1 (ISO-...-1)中的单字节字符流而导致黑色菱形。

4

1 回答 1

3

如果latin1您的数据库是 8 位干净编码(它在 MySQL 中,而不是关于 MSSQL),那么您不需要做任何事情来重建 utf-8 字符串。当你把它从你的数据库中提取到 PHP 中时,你会得到你输入的相同字节,即 UTF-8。

如果您的数据库latin1不是8 位干净的编码,那么您的字符串将无法恢复这意味着在您将 utf-8 字符串写入数据库时​​,数据库认为无效的任何字符都被删除或替换。没有任何方法可以从中恢复。

于 2013-01-23T16:10:31.940 回答