通过 odbc_connect() 连接到 SQL 服务器数据库时出现编码问题

Encoding problem when connecting to SQL Server database via odbc_connect()

首先,我无法在我的主机上使用最新的 SQLSRV 驱动程序,所以我无法使用 odbc 连接。

$connection_string = 'DRIVER={SQL Server};SERVER=111.111.111.111;DATABASE=MY_DATABASE';
$user = 'name';
$pass = 'pass';
$connection = odbc_connect( $connection_string, $user, $pass, SQL_CUR_USE_ODBC );

该数据库的排序规则是 Slovak_CI_AI。如果我将 PHP header 设置为 utf-8,输出数据看起来很乱,编码错误。

如果我将 'Slovak_CI_AI' 作为我的 PHP header 的字符集,数据显示正常,但这可能是不行的,因为我需要在WordPress,如果它们包含 special/non-english 个字符(这些字符串在 WP 看来已损坏),则无法处理它们。

我用 mb_convert_encoding、iconv 或 utf8_decode 尝试过很多次转换,但都没有成功。 WordPress 使用 utf-8.

我找不到任何解决方案。

更新: 我试过将 CHARSET=UTF8 添加到我的 odbc 连接字符串,但没有成功。我还发现数据库中文本的字符集是 cp1250。我已经尝试将 cp1250 设置为我的 PHP header 的字符集,输出很好,但 WordPress 在遇到特殊字符时仍然失败。我试过使用 iconv 将这些字符串从 cp1250 转换为 utf-8,但也不走运 - 字符串在输出时编码错误,WordPress 也失败了。

整个编码过程对我来说仍然很混乱,但我还是设法做到了。它适用于:

  • odbc 连接字符串包含 charset=cp1250
  • PHP header 字符集设置为 utf-8
  • 我使用 iconv
  • 将所有有问题的字符串从 cp1250 转换为 utf-8