MSSQL,JSON,UTF8让他们一起工作

时间:2014-01-31 10:41:59

标签: php sql-server json utf-8

我的网页出现问题,我在字符串上运行了json_encode并丢失了它们因为它们有特殊字符。我现在正在编写一个测试脚本,我从我的Linux终端运行,以了解会发生什么。我现在已经能够以UTF-8获得我的输出和所有内容了但是当我想要JSON的东西时,我必须使用utf8_encode($ string)的东西已经是utf-8用于某些reaoson ..我真的很想清理此解决方案,以便我不必再运行utf8_encode。

测试功能:

function dbConnect() {
    $link = mssql_connect('*******', '*******', '*******');
    mssql_select_db('*******', $link);
    @mssql_query('SET ANSI_NULLS ON; SET ANSI_WARNINGS ON;', $link);
    if (!$link) {
        echo "<p>Errore connessione db</p>";
        exit();
    }
    return $link;
}

function matchCode($table) {

$result = Array();
    $result['data'] = false;
    $result['info'] = "";
    $link = dbConnect();
    $query = mssql_query("exec MatchCodeList 0, '$table'", $link);
    if(!$query) {
        $result['info'] = mssql_get_last_message();
        echo "Error: " . $result['info'] . "<br>";
    } else {
        $result['data'] = Array();
        while ($row = mssql_fetch_row($query)) {
            $current_encoding = mb_detect_encoding($row[1], 'auto');
            echo $row[0] . ": " . $row[1] . " (" . $current_encoding . ")\n";
            //$row[1] = utf8_encode($row[1]);
            echo "   ==> " . $row[1] . "\n\n";
            array_push($result['data'], $row);
        }
    }
    mssql_close($link);
    $j = json_encode($result);
    var_dump($j);
    return $result;
}


matchCode("ACT_TSTA");
exit();

此功能输出:

10: Attività pianificata (UTF-8)
   ==> Attività pianificata

20: Attività sospesa (UTF-8)
   ==> Attività sospesa

30: Attività non effettuata (UTF-8)
   ==> Attività non effettuata

50: Attività in corso (UTF-8)
   ==> Attività in corso

99: Attività conclusa (UTF-8)
   ==> Attività conclusa

00: Attività annullata (UTF-8)
   ==> Attività annullata

string(206) "{"data":[["10",null,null,1,null,0,null],["20",null,null,2,null,0,null],["30",null,null,3,null,0,null],["50",null,null,4,null,0,null],["99",null,null,5,null,0,null],["00",null,null,6,null,0,null]],"info":""}"

相反,如果我取消注释utf8_encode,这就是我得到的:

10: Attività pianificata (UTF-8)
   ==> Attività pianificata

20: Attività sospesa (UTF-8)
   ==> Attività sospesa

30: Attività non effettuata (UTF-8)
   ==> Attività non effettuata

50: Attività in corso (UTF-8)
   ==> Attività in corso

99: Attività conclusa (UTF-8)
   ==> Attività conclusa

00: Attività annullata (UTF-8)
   ==> Attività annullata

string(335) "{"data":[["10","Attivit\u00e0 pianificata",null,1,null,0,null],["20","Attivit\u00e0 sospesa",null,2,null,0,null],["30","Attivit\u00e0 non effettuata",null,3,null,0,null],["50","Attivit\u00e0 in corso",null,4,null,0,null],["99","Attivit\u00e0 conclusa",null,5,null,0,null],["00","Attivit\u00e0 annullata",null,6,null,0,null]],"info":""}"

正如我所说,我想删除utf8_encode但是得到一个正确的json_encode,因为我不明白为什么我应该utf8_encode已经是utf8的东西,如mb_detect_encoding所示。

0 个答案:

没有答案