PHP读取mssql,json数据中文乱码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP读取mssql,json数据中文乱码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3793字,纯文字阅读大概需要6分钟。
内容图文

PHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码)
当读取数据库数据时,使用php自带的json_encode()返回到前端,结果中文不显示。
解决办法:
<?php header("Content-Type: text/html;charset=utf-8"); //告诉浏览器不要缓存数据header("Cache-Control: no-cache"); require "../conn.php"; require "../share/json_gbk2utf8.php"; $query = ‘SELECT seq, employeeID, employeeName, department, position, sex, birthday, entryTime, description, convert(varchar(20),createTime,120) as createTime,<span style="color:#FF0000;">//这里要注意,因为mssql2008的datetimne类型是带有毫秒的,直接在前端显示 可能会有问题,所以要做一次转换</span> convert(varchar(20),updateTime,120) as updateTime FROM employees‘; $arr = Array(); $query = iconv("utf-8", "gbk//ignore", $query);//为了解决中文乱码问题 if($result = sqlsrv_query($conn, $query)){ while($row = sqlsrv_fetch_array($result)){ $arr[] = $row; } } $data = JSON($arr); // file_put_contents("E:/mylog.log", "JSON:".$data."\r\n", FILE_APPEND); echo$data; ?>
<?php //json_gbk2utf8.php /************************************************************** *为了实现对含有中文字符的数组进行json编码 * * 使用特定function对数组中所有元素做处理 * @param string &$array 要处理的字符串 * @param string $function 要执行的函数 * @return boolean $apply_to_keys_also 是否也应用到key上 * @access public * *************************************************************/function arrayRecursive(&$array, $function, $apply_to_keys_also = false) { static$recursive_counter = 0; if (++$recursive_counter > 1000) { die(‘possible deep recursion attack‘); } foreach ($arrayas$key => $value) { if (is_array($value)) { arrayRecursive($array[$key], $function, $apply_to_keys_also); } else { // file_put_contents("E:/mylog.log", "原始:".$value."\r\n", FILE_APPEND);$value = iconv("gbk//ignore", "utf-8", $value); // file_put_contents("E:/mylog.log", "utf-8:".$value."\r\n", FILE_APPEND);$array[$key] = $function($value); // file_put_contents("E:/mylog.log", "urlencode:".$array[$key]."\r\n", FILE_APPEND); } if ($apply_to_keys_also && is_string($key)) { $new_key = $function($key); if ($new_key != $key) { $array[$new_key] = $array[$key]; unset($array[$key]); } } } $recursive_counter--; } /************************************************************** * * 将数组转换为JSON字符串(兼容中文) * @param array $array 要转换的数组 * @return string 转换得到的json字符串 * @access public * *************************************************************/function JSON($array) { arrayRecursive($array, ‘urlencode‘, true); $json = json_encode($array); returnurldecode($json); } /* $array = array ( ‘Name‘=>‘希亚‘, ‘Age‘=>20 ); echo JSON($array); */ ?>
这样,sql server 2008中的中文就可以在网页正常显示了。
如果要将中文正常插入到sql server 2008中,还要加入一条代码:$query = iconv("utf-8", "gbk//ignore", $query);//为了解决中文乱码问题
完整代码如下 :
<?php /** * 如果员工编号在MySql中不存在则在MySql中插入员工记录 * 如果该员工编号已经存在则进行更新操作 *///如果用JSON格式则要使用text/html,不能使用text/xmlheader("Content-Type: text/html;charset=utf-8"); // header("Content-Type: text/html;charset=GBK"); //告诉浏览器不要缓存数据header("Cache-Control: no-cache"); require ‘../conn.php‘; $seq = $_POST["seq"]; $employeeID = $_POST["employeeID"]; $employeeName = $_POST["employeeName"]; $department = $_POST["department"]; if(!isset($seq) || $seq == ""){//seq不存在则插入新记录$query = "INSERT INTO employees (employeeID, employeeName, department, createTime, updateTime) VALUES (N‘$employeeID‘,N‘$employeeName‘,N‘$department‘, getdate(), getdate())"; }else{//如果seq已存在则更新已有记录$query = "UPDATE employees SET employeeID=‘$employeeID‘, employeeName=‘$employeeName‘,department=‘$department‘, updateTime=getdate() WHERE seq=‘$seq‘"; } // file_put_contents("E:/mylog.log", $query."\r\n",FILE_APPEND);//用于调试 <span style="color:#FF0000;">$query = iconv("utf-8", "gbk//ignore", $query);//为了解决中文乱码问题</span>if($result = sqlsrv_query($conn, $query)){ echotrue; }else{ echofalse; } // echo $query; ?>
原文:http://www.cnblogs.com/starksoft/p/5377140.html
内容总结
以上是互联网集市为您收集整理的PHP读取mssql,json数据中文乱码全部内容,希望文章能够帮你解决PHP读取mssql,json数据中文乱码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。