>  기사  >  백엔드 개발  >  json과 PHP 간의 인코딩 변환 문제

json과 PHP 간의 인코딩 변환 문제

不言
不言원래의
2018-04-23 11:41:241323검색

이 글은 주로 json과 PHP 사이의 인코딩 변환 문제를 소개합니다. 이는 특정 참고 가치가 있습니다. 이제 모든 사람과 공유합니다. 도움이 필요한 친구들은 이를 참고할 수 있습니다.

<br/>
<br/>


※ 전제: json과 php는 서로 상호 작용합니다. 데이터를 전달할 때 발생할 수 있는 데이터 변환 상황 처리(주로 배열의 경우):


☆ 프론트엔드 코드:

var arr = {"name":"张伟","age":19}; //此时生成的是json的数组
arr = json.stringify(arr); //此时将arr转换成 json的字符串类型
$.ajax({
               type:"post",
                url:url,
                data:{arr:arr}, //将转换成字符串类型的json传递给php后台,换换成字符串类型后可以一次性传递多个数据
                success:function(res){
                   
   
                    console.log(res);
                    
                }
            });


☆ 백엔드 코드(전달만 하는 경우) 문자열) :

map = $_POST[&#39;arr&#39;];
            
 $map = json_decode($map);//json对象 解码之后PHP可以使用,但要用json的方法在后台使用$map->name 
 echo $map->name; // 会输出到res中, 通过consolve.log(res) 可以直接输出



질문


PHP 및 JSON에서 배열을 전달하는 경우에 대한 두 가지 방법이 배경에서 전면으로 전송하는 두 가지 방법이 있습니다. : echo, ajaxreturn


$1 첫 번째 유형 방법:

echo, 직접 인코딩하고 json 문자열을 출력해야 합니다


이때 상황은 두 가지인데 하나는 프론트 데스크로부터 받은 json 문자열을 반환하는 것과, 다른 하나는 백그라운드 배열에 새로 생성하여 프론트 데스크로 돌아가는 것입니다.


$1.1 백그라운드는 포그라운드 데이터를 받아 동일한 데이터를 반환합니다.

$map = $_POST[&#39;arr&#39;];//从前台传递过来的$map
$map = json_decode($map);//json对象 解码之后给php后台使用
.....
$map = json_encode($map);//对json数组进行编码生成json字符串
echo $map; //输出$map到前台

$1.2 백그라운드는 프로그램을 생성하고 프런트엔드로 돌아갑니다.

$mapN = json_encode($mapN);//在后台自行创建的数组,在传递给前台之前同样需要进行编码
echo $mapN;

$1.3 포그라운드 작업

res = eval("("+res+")");//通过res将从后台传过来的json字符串转换成数组
console.log(res.name);


$2 두 번째 방법 :

ajaxreturn, 배열 전달 시 인코딩이 필요하지 않습니다. 기본적으로 json의 문자열 형식이 전달되지만 json 문자열을 배열로 변환하려면 프런트엔드에서 변환이 필요합니다.

이때는 두 가지 상황이 있는데, 하나는 프론트 데스크로부터 받은 json 문자열을 반환하는 것이고, 다른 하나는 백그라운드에서 새로운 배열을 생성하여 프론트 데스크로 반환하는 것입니다.

$2.1 프런트에서 프로그램을 받아 백그라운드에서 프런트로 직접 반납

$map = $_POST[&#39;arr&#39;];
$map = json_decode($map);//json对象 解码之后
$this->ajaxReturn($map,&#39;json&#39;);


$2.2 백그라운드에서 프로그램을 작성하여 프런트로 반납

$mapN = array("name"=>"zhangwei");
$this->ajaxReturn($mapN,&#39;json&#39;);// 此时不需要json_encode() ,前台通过mapN.name 或者mapN[&#39;name&#39;]输出

$2.3 포그라운드 작업

res = eval("("+res+")");//通过res将从后台传过来的json字符串转换成数组
console.log(res.name);



$3 보충:

백그라운드에서 프런트엔드로 데이터를 전송하는 것과 관련된


echo와 ajaxreturn의 차이점:

echo는 PHP 배열을 json 전송 형식(json 문자열 유형)으로 인코딩하지 않습니다. ajaxreturn은 인코딩을 위해 자동으로 json_encode 함수를 호출합니다.

둘 사이의 동일:

json 값을 프런트 데스크에 전달한 후 변환하려면 eval("("+res+")")이 필요합니다. 사용하기 전에 json 배열로 저장하세요




$4 참고:


여기서 백그라운드는 프런트엔드 성공에 데이터를 반환할 수 있습니다. 함수(res)는 echo 또는 ajaxreturn을 통해 수행됩니다.

하지만 반환 후의 데이터 사용량은 다릅니다.

1. 문자열 유형: 백그라운드를 통해

echo
를 통해 문자열을 프론트 데스크의 res로 직접 출력할 수 있습니다.

2. 배열 유형: 프론트 데스크에서 전달된 json의 문자열 유형 배열 유형이든, 백그라운드에서 생성된 배열 유형이든 ajaxreturn을 통해 반환됩니다. 프론트 데스크에서는 다음을 통해


을 호출할 수 있습니다. 배열 이름 ['keyname']

또는

array name.keyname
팁:


1. 프론트 데스크에서 json 문자를 뒤쪽으로 전달합니다. 문자열(그 자체는 배열이지만

stringify

을 통해 json 문자열로 변환됨) 전경) 백그라운드에서 디코딩하여 PHP에서 사용할 수 있는 json 배열로 변환하려면 json_decode가 필요합니다. 호출 메서드 배열 이름 -> 키

2. 백그라운드에서 생성된 배열을 json_encode를 통해 json 문자열을 사용하면 데이터가 프런트 데스크로 전송된 후 res = eval("("+res+")");을 통해 json 배열로 변환되어야 합니다. 프런트 데스크 호출 방법: 배열 이름 ['keyname']

또는 array name.keyname 관련 권장 사항: php 문자 인코딩 변환

PHP 인코딩 변환에서 잘못된 문자를 해결하는 방법

위 내용은 json과 PHP 간의 인코딩 변환 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.