我通过ODBC连接到Filemaker数据库,有些数据包含é或è等重音符号。这些字符显示为“?”现在,这有点问题。这是我的代码:
$connection = odbc_connect($dsn, $username, $password, SQL_CUR_USE_ODBC);
$sql = "SELECT * FROM Table1";
$res = odbc_exec($connection,$sql);
while ($row = odbc_fetch_array($res)){
$x++;
$values= ($x . ": Customer:". $row['Customer'] . "\n");
print($values);
}
odbc_free_result($res);
odbc_close($connection);
我尝试了一些方法,例如在标题中添加'charset = utf-8',但到目前为止似乎没有任何效果。我很确定我需要在某处包含utf-8,我还没有找到类似于我的代码在线的odbc示例。谢谢!
答案 0 :(得分:0)
您需要使用正确的编码进行连接。您可以使用以下查询确定正确的编码:
SELECT hex(CustomerCustomer) FROM Table1;
将违规字符的十六进制代码与目标编码匹配,最有可能是latin1
和UTF-8
。如果您无法识别十六进制代码,请将输出粘贴到此处,我将为您识别它。
答案 1 :(得分:0)
ODBC使用名为WIN1252的编码类型。
试一试:
mb_convert_encoding($value,'UTF-8','Windows-1252');
我已经用它做了相反的方法从win1252到utf8通过这种方式应该工作..让我知道
所以试试吧: 使用函数mb_detect_encoding()。如果该功能不存在,请尝试此代码。
if ( !function_exists('mb_detect_encoding') ) {
function mb_detect_encoding ($string, $enc=null, $ret=null) {
static $enclist = array(
'UTF-8', 'ASCII',
'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5',
'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-10',
'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16',
'Windows-1251', 'Windows-1252', 'Windows-1254',
);
$result = false;
foreach ($enclist as $item) {
$sample = iconv($item, $item, $string);
if (md5($sample) == md5($string)) {
if ($ret === NULL) { $result = $item; } else { $result = true; }
break;
}
}
return $result;
}
来源: PHP