我的网页出现问题,我在字符串上运行了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所示。