search
HomeBackend DevelopmentPHP TutorialPHP reads mssql2008, json data is garbled in Chinese_PHP tutorial

PHP reads mssql2008, json data is garbled in Chinese_PHP tutorial

Jul 14, 2016 am 10:12 AM
jsonphputf-8ChineseGarbled charactersusedatadatabaseyescodingWeb pageread

PHP and web pages use UTF-8 encoding, the database is sql server2008, and the default encoding (936, GBK encoding) is used
When reading database data, use the json_encode() that comes with PHP to return to the front end, and the results will not be displayed in Chinese.

Solution:

employeeGet.php 
<?php     
    header("Content-Type: text/html;charset=utf-8"); 
    //告诉浏览器不要缓存数据  
    header("Cache-Control: no-cache");   
     
    require "../conn.php"; 
    require "../share/json_gbk2utf8.php"; 
 
    $query = &#39;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&#39;;     
    $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; 
?> 

employeeGet.php
<?php 
 header("Content-Type: text/html;charset=utf-8");
 //告诉浏览器不要缓存数据
 header("Cache-Control: no-cache"); 
 
 require "../conn.php";
 require "../share/json_gbk2utf8.php";

 $query = &#39;SELECT
    seq,
    employeeID,
    employeeName,
    department,
    position,
    sex,
    birthday,
    entryTime,
    description,
    convert(varchar(20),createTime,120) as createTime,//这里要注意,因为mssql2008的datetimne类型是带有毫秒的,直接在前端显示
可能会有问题,所以要做一次转换
    convert(varchar(20),updateTime,120) as updateTime       
   FROM employees&#39;; 
 $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;
?>

 

? //json_gbk2utf8.php 
/***************************************************** **********
*In order to implement json encoding of arrays containing Chinese characters
*
* Use a specific function to process all elements in the array
* @param string &$array The string to be processed
* @param string $function The function to be executed
* @return boolean $apply_to_keys_also Whether to also apply to keys
* @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 ($array as $key => $value) {
        if (is_array($value)) {
            arrayRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
//          file_put_contents("E:/mylog.log", "原始:".$value."rn", FILE_APPEND); 
            $value = iconv("gbk//ignore", "utf-8", $value);
//          file_put_contents("E:/mylog.log", "utf-8:".$value."rn", FILE_APPEND); 
            $array[$key] = $function($value);
//          file_put_contents("E:/mylog.log", "urlencode:".$array[$key]."rn", 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--;
}

/***************************************************** **********
*
* Convert array to JSON string (compatible with Chinese)
* @param array $array The array to be converted
* @return string The converted json string
* @access public
*
*************************************************** ***********/
function JSON($array) {
    arrayRecursive($array, 'urlencode', true);
    $json = json_encode($array);
    return urldecode($json);
}
/*
$array = array
(
        'Name'=>'希亚',
        'Age'=>20
);


echo JSON($array);
*/
?>

//json_gbk2utf8.php
/***************************************************** **********
*In order to implement json encoding of arrays containing Chinese characters
*
* Use a specific function to process all elements in the array
* @param string &$array The string to be processed
* @param string $function The function to be executed
* @return boolean $apply_to_keys_also Whether to also apply to keys
* @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 ($array as $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);
return urldecode($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/xml  
    header("Content-Type: text/html;charset=utf-8"); 
//  header("Content-Type: text/html;charset=GBK");  
    //告诉浏览器不要缓存数据  
    header("Cache-Control: no-cache"); 
     
    require &#39;../conn.php&#39;; 
    $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&#39;$employeeID&#39;,N&#39;$employeeName&#39;,N&#39;$department&#39;,  
                    getdate(), getdate())"; 
    }else{//如果seq已存在则更新已有记录  
        $query = "UPDATE employees SET employeeID=&#39;$employeeID&#39;,  
                employeeName=&#39;$employeeName&#39;,department=&#39;$department&#39;, 
                updateTime=getdate()   
            WHERE seq=&#39;$seq&#39;"; 
    } 
     
//  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)){ 
        echo true; 
    }else{ 
        echo false; 
    } 
//  echo $query;  
?> 

<?php
 /**
  * 如果员工编号在MySql中不存在则在MySql中插入员工记录
  * 如果该员工编号已经存在则进行更新操作
  */
 //如果用JSON格式则要使用text/html,不能使用text/xml
 header("Content-Type: text/html;charset=utf-8");
//  header("Content-Type: text/html;charset=GBK");
 //告诉浏览器不要缓存数据
 header("Cache-Control: no-cache");
 
 require &#39;../conn.php&#39;;
 $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&#39;$employeeID&#39;,N&#39;$employeeName&#39;,N&#39;$department&#39;,
     getdate(), getdate())";
 }else{//如果seq已存在则更新已有记录
  $query = "UPDATE employees SET employeeID=&#39;$employeeID&#39;,
    employeeName=&#39;$employeeName&#39;,department=&#39;$department&#39;,
    updateTime=getdate() 
   WHERE seq=&#39;$seq&#39;";
 }
 
//  file_put_contents("E:/mylog.log", $query."\r\n",FILE_APPEND);//用于调试
 $query = iconv("utf-8", "gbk//ignore", $query);//为了解决中文乱码问题
 if($result = sqlsrv_query($conn, $query)){
  echo true;
 }else{
  echo false;
 }
//  echo $query;
?>

 

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477223.htmlTechArticlePHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码) 当读取数据库数据时,使用php自带的json_encode()返回到前端,结...
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
PHP Email: Step-by-Step Sending GuidePHP Email: Step-by-Step Sending GuideMay 09, 2025 am 12:14 AM

PHPisusedforsendingemailsduetoitsintegrationwithservermailservicesandexternalSMTPproviders,automatingnotificationsandmarketingcampaigns.1)SetupyourPHPenvironmentwithawebserverandPHP,ensuringthemailfunctionisenabled.2)UseabasicscriptwithPHP'smailfunct

How to Send Email via PHP: Examples & CodeHow to Send Email via PHP: Examples & CodeMay 09, 2025 am 12:13 AM

The best way to send emails is to use the PHPMailer library. 1) Using the mail() function is simple but unreliable, which may cause emails to enter spam or cannot be delivered. 2) PHPMailer provides better control and reliability, and supports HTML mail, attachments and SMTP authentication. 3) Make sure SMTP settings are configured correctly and encryption (such as STARTTLS or SSL/TLS) is used to enhance security. 4) For large amounts of emails, consider using a mail queue system to optimize performance.

Advanced PHP Email: Custom Headers & FeaturesAdvanced PHP Email: Custom Headers & FeaturesMay 09, 2025 am 12:13 AM

CustomheadersandadvancedfeaturesinPHPemailenhancefunctionalityandreliability.1)Customheadersaddmetadatafortrackingandcategorization.2)HTMLemailsallowformattingandinteractivity.3)AttachmentscanbesentusinglibrarieslikePHPMailer.4)SMTPauthenticationimpr

Guide to Sending Emails with PHP & SMTPGuide to Sending Emails with PHP & SMTPMay 09, 2025 am 12:06 AM

Sending mail using PHP and SMTP can be achieved through the PHPMailer library. 1) Install and configure PHPMailer, 2) Set SMTP server details, 3) Define the email content, 4) Send emails and handle errors. Use this method to ensure the reliability and security of emails.

What is the best way to send an email using PHP?What is the best way to send an email using PHP?May 08, 2025 am 12:21 AM

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

Best Practices for Dependency Injection in PHPBest Practices for Dependency Injection in PHPMay 08, 2025 am 12:21 AM

The reason for using Dependency Injection (DI) is that it promotes loose coupling, testability, and maintainability of the code. 1) Use constructor to inject dependencies, 2) Avoid using service locators, 3) Use dependency injection containers to manage dependencies, 4) Improve testability through injecting dependencies, 5) Avoid over-injection dependencies, 6) Consider the impact of DI on performance.

PHP performance tuning tips and tricksPHP performance tuning tips and tricksMay 08, 2025 am 12:20 AM

PHPperformancetuningiscrucialbecauseitenhancesspeedandefficiency,whicharevitalforwebapplications.1)CachingwithAPCureducesdatabaseloadandimprovesresponsetimes.2)Optimizingdatabasequeriesbyselectingnecessarycolumnsandusingindexingspeedsupdataretrieval.

PHP Email Security: Best Practices for Sending EmailsPHP Email Security: Best Practices for Sending EmailsMay 08, 2025 am 12:16 AM

ThebestpracticesforsendingemailssecurelyinPHPinclude:1)UsingsecureconfigurationswithSMTPandSTARTTLSencryption,2)Validatingandsanitizinginputstopreventinjectionattacks,3)EncryptingsensitivedatawithinemailsusingOpenSSL,4)Properlyhandlingemailheaderstoa

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.