通过 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
首先,我无法在我的主机上使用最新的 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