> 백엔드 개발 > PHP 튜토리얼 > PHP json_encode() 함수 및 중국어 코드 문제에 대한 자세한 설명

PHP json_encode() 함수 및 중국어 코드 문제에 대한 자세한 설명

高洛峰
풀어 주다: 2023-03-04 11:26:01
원래의
3312명이 탐색했습니다.

PHP에 내장된 json_encode() 함수를 이용하면(php>5.2) PHP에 있는 데이터를 다른 언어로 옮겨서 잘 사용할 수 있습니다.

이 함수의 기능은 숫자 값을 json 데이터 저장 형식으로 변환하는 것입니다.

<?php
$arr = array
  (
   &#39;Name&#39;=>&#39;希亚&#39;,
   &#39;Age&#39;=>
  );
$jsonencode = json_encode($arr);
echo $jsonencode;
?>
로그인 후 복사

프로그램 실행 결과는 다음과 같습니다.

{"이름":null,"Age":}

json_encode 함수의 한자는 null로 인코딩되어 있는데, 구글링을 해보니 매우 간단해서 프론트엔드와 긴밀하게 통합하기 위해 Json은 utf- 인코딩만 지원하기 때문인 것 같습니다. 프론트엔드 자바스크립트도 utf-입니다.

<?php
$array = array
 (
  &#39;title&#39;=>iconv(&#39;gb&#39;,&#39;utf-&#39;,&#39;这里是中文标题&#39;),
  &#39;body&#39;=>&#39;abcd...&#39;
 );
echo json_encode($array);
?>
로그인 후 복사

이 프로그램의 실행 결과는 다음과 같습니다.

{"title":"u8fd9u91ccu662fu4e2du6587u6807u9898","body":"abcd .."}

배열의 모든 중국어 문자가 누락되었거나 json_encode 뒤에 u2353 등이 나타납니다.

해결 방법은 urlencode() 함수를 사용하여 다음을 처리하는 것입니다. json_encode 이전에 urlencode()를 사용하여 모든 배열의 모든 내용을 처리한 다음 json_encode()를 사용하여 json 문자열로 변환합니다. 마지막으로 urldecode()를 사용하여 인코딩된 중국어를 다시 변환합니다.

<?php
/**************************************************************
 *
 * 使用特定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 = ;
 if (++$recursive_counter > ) {
  die(&#39;possible deep recursion attack&#39;);
 }
 foreach ($array as $key => $value) {
  if (is_array($value)) {
   arrayRecursive($array[$key], $function, $apply_to_keys_also);
  } else {
   $array[$key] = $function($value);
  }
  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, &#39;urlencode&#39;, true);
 $json = json_encode($array);
 return urldecode($json);
}
$array = array
  (
   &#39;Name&#39;=>&#39;希亚&#39;,
   &#39;Age&#39;=>
  );
echo JSON($array);
?>
로그인 후 복사

이번에 성공해서 실행 결과는 다음과 같습니다.

{"Name":"Xia"," Age": "20"}

다음은 PHP json_encode의 중국어 왜곡 문자에 대한 솔루션을 소개합니다.

많은 사람들이 Ajax를 사용하여 중국어 왜곡 문자 문제를 경험했다고 생각합니다. 배경 PHP 페이지와 상호 작용합니다. 경량 데이터 교환 형식인 JSON은 매우 널리 사용됩니다. 그러나 PHP를 백엔드 상호 작용으로 사용하면 중국어 문자가 깨질 수 있는 문제가 발생하기 쉽습니다. JSON은 js와 동일하며, 클라이언트 문자는 UTF8 형식으로 처리됩니다. 즉, JSON을 전송 및 수신용 데이터 형식으로 사용할 때 문자는 UTF8로 인코딩됩니다. UTF8을 사용하면 중국어 왜곡 문자가 나타나는 것이 매우 쉽습니다. 해결책은 js 또는 PHP로 JSON 데이터를 처리할 때 자연스럽게 UTF8을 사용하는 것입니다.

PHP5.2 이상에서는 json_encode를 내장 함수로 사용하므로 웹사이트 제작자에게 큰 편의성을 제공합니다. 그러나 json_encode는 UTF8로 인코딩된 문자만 지원한다는 점에 유의하세요. 또는 null 값이 나타납니다.

해결 방법은 다음 두 단계로 나누어집니다.

1단계

JSON을 처리할 때 문자가 UTF8로 인코딩되었는지 확인하세요. 특히 데이터베이스 인코딩과 페이지 인코딩을 모두 UTF8로 변경할 수 있습니다. 물론 gbk 인코딩을 사용하려는 경우 JSON 처리 전에 문자를 UTF8로 변환할 수 있습니다. PHP에는 다음과 같은 메소드가 있습니다:

<?php
  $data="JSON中文";
  $newData=iconv("GB2312","UTF-8//IGNORE",$data);
  echo $newData;
  //ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符都不会被保存。
  //或是("GB2312","UTF-8",$data);
?>
로그인 후 복사

Step2

백엔드 PHP 페이지(페이지는 UTF-8 또는 UTF-8의 경우) json_encode를 사용하여 PHP의 배열 배열을 JSON 문자열로 변환합니다. 예:

<?php
 $testJSON=array(&#39;name&#39;=>&#39;中文字符串&#39;,&#39;value&#39;=>&#39;test&#39;);
 echo json_encode($testJSON);
?>
로그인 후 복사

출력 결과 보기:

{“name”:”u4e2du6587u5b57u7b26u4e32″,”value”:”test ” }

UTF8로 인코딩된 문자를 사용하더라도 json_encode를 사용하면 한자가 깨져서 나타나는 것을 볼 수 있다. 해결 방법은 json_encode를 사용하기 전에 urlencode() 함수로 문자를 처리한 다음 json_encode를 사용하고 결과를 출력할 때 urldecode() 함수를 사용하여 다시 변환하는 것입니다. 자세한 내용은 다음과 같습니다.

<?php
 $testJSON=array(&#39;name&#39;=>&#39;中文字符串&#39;,&#39;value&#39;=>&#39;test&#39;);
 //echo json_encode($testJSON);
 foreach ( $testJSON as $key => $value ) {
  $testJSON[$key] = urlencode ( $value );
 }
 echo urldecode ( json_encode ( $testJSON ) );
?>
로그인 후 복사

출력 결과 보기:

{"name":"중국어 문자열","value ": "test"}

이 시점에서 한자가 성공적으로 출력되었습니다. json_encode를 자유롭게 사용해 보세요. 이러한 방식으로, 프론트엔드 자바스크립트에서 Ajax가 eval을 수신할 때 PHP 배경의 JSON 문자열 출력은 중국어로 왜곡되어 표시되지 않습니다. 왜냐하면 js도 PHP와 유사한 UTF8 형식으로 JSON 형식 데이터를 처리하기 때문입니다. PHP 페이지를 수신합니다. JSON 문자열은 문제를 일으키지 않습니다.


PHP json_encode() 함수에 대한 더 자세한 설명과 한자 깨짐 관련 글은 PHP 중국어 홈페이지를 주목해주세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿