首页 > 解决方案 > 通过 odbc_connect() 连接到 SQL Server 数据库时出现编码问题

问题描述

首先,我没有选择在我的主机上使用最新的 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 标头设置为 utf-8,输出数据看起来很乱,编码是错误的。

如果我将“Slovak_CI_AI”作为字符集添加到我的 PHP 标头,数据显示正常,但可能不行,因为我需要在 WordPress 中处理这些数据,如果它们包含特殊/非英语,则无法处理它们字符(这些字符串看起来对 WP 来说是损坏的)。

我用 mb_convert_encoding、iconv 或 utf8_decode 尝试了很多转换,但没有运气。WordPress 使用 utf-8。

我找不到任何解决方案。

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

标签: phpsql-serverencodingutf-8

解决方案


这整个编码的事情对我来说仍然感觉很混乱,但我设法做到了。它在以下情况下起作用:

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

推荐阅读