从我的数据库显示法语口音的问题

时间:2014-06-30 18:05:00

标签: php database utf-8 odbc

我通过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示例。谢谢!

2 个答案:

答案 0 :(得分:0)

您需要使用正确的编码进行连接。您可以使用以下查询确定正确的编码:

SELECT hex(CustomerCustomer) FROM Table1;

将违规字符的十六进制代码与目标编码匹配,最有可能是latin1UTF-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