项目原来是C#+MSSQL的,服务器是Win,国外的服务器,放在Godaddy上。现在要把数据导出来,因为PHP处理JSON比较方便就用PHP写了,但取出来的数据全部是乱码。很纠结啊,实在不想又用C#再写一次代码,小弟PHP新手,求教各位。
尝试网上诸多转码的代码,以失败告终,救命啊,实在不想再写一次代码,最关键的是,C#中还要处理JSON和保存文件,麻烦。
代码很简单,给出关键代码吧,没必要贴之么长了。
$conn=mssql_connect($sql_server,$sql_username,$sql_password) or die("无法连接到$server数据库!");
$db=mssql_select_db($sql_database,$conn) or die("无法打开数据 $database");//导出的代码
//echo "导出表:".$table.";第".$pageIndex."页;".$start."/".$end."</ br>";
$sql = 'SELECT * FROM (SELECT
ROW_NUMBER() OVER (ORDER BY '.$orderId.' ASC) AS RowNumber,
*
FROM
'.$table.') _myResults
WHERE
RowNumber between '.$start.' and '.$end;

if($test){
echo $sql;
}
//return;
$query = mssql_query($sql);
while($row = mssql_fetch_array($query))
{

for ($i = 0; $i < mssql_num_fields($query); ++$i) {
// Fetch the field information
$field = mssql_fetch_field($query, $i);
$value = $row[$field->name];
$type = $field->type;
if($type == "blob"){
$value = mssql_guid_string($value);
}else if($type == "datetime"){
//$value = "时间";
}

//$value = mb_convert_encoding($value, 'UTF-8','ascii,GB2312,gbk,UTF-8');  
// Print the row
$data[$field->name] = $value;
//echo $field->name.">".$field->type."<br />";
}
$result[] = $data;
};
  
$content = json_encode($result);
if($output){
echo $content;
}else{
//保存到文件
file_put_contents($table."_".$pageIndex.".json", $content);
}
mssql_free_result($query);

解决方案 »

  1.   

    完整的代码在这儿:
    http://iove.net/archives/3065.html
      

  2.   

    echo base64_encode(serialize($result));
    贴出结果
    如果 $result 较大,可以
    echo base64_encode(serialize($result[0]));
    只要有中文就行 
      

  3.   


    试过不行啊,base64后再转回来还是乱码,中文全部是??。
    循环读取的时候就已经是乱码了,这你个是把结果base64,没有什么意义啊。
    求助各位PHP高手
      

  4.   

    更新,使用ini_set('mssql.charset','UTF-8');无效,当然,用gb2312也是无效的,服务器是英文环境。
      

  5.   

    知道你在页面中显示的是 ?? 
    我需要见到你为家处理的,直接冲数据库里读出设数据原来是C#+MSSQL的,C#能读出,就证明问题不是出在数据库
      

  6.   

    嗯,直接从数据库看没有问题,用C#读也没有问题,就是PHP读出来全部是??
      

  7.   

    本帖最后由 xuzuning 于 2012-10-14 08:15:21 编辑
      

  8.   

    页面使用改变gb2312编码
    header('content-type:text/html;charset=gb2312');
    再试试,然后不用对数据 做任何处理