>  기사  >  백엔드 개발  >  php_php 팁의 json_encode UTF-8 중국어 왜곡 문자에 대한 더 나은 솔루션

php_php 팁의 json_encode UTF-8 중국어 왜곡 문자에 대한 더 나은 솔루션

WBOY
WBOY원래의
2016-05-16 20:35:31915검색

최근 인터페이스 코드에 json_encode를 사용했는데, json_encode 인코딩을 UTF-8 중국어로 설정하면 왜곡되지 않는다는 것을 인터넷에서 발견했습니다. 이 방법이 실제로 효과적인 것으로 확인되었습니다. 왜인지는 모르겠지만 시간이 지나도 잘 작동하지 않습니다. 다음은 json_encode에 대한 내 솔루션입니다. 더 좋은 방법이 있다면 공유해주세요!

첫 번째 유형:

이것은 간단한 코드 변환이며, urlcode 뒤에 필요한 배열을 반환합니다

내 코드에는 이 정도면 충분합니다.

코드는 다음과 같습니다

public static function encodeOperations ($array)

{

foreach ((array)$array as $key => $value) {

if (is_array($value)) {

encodeOperations($array[$key]);

} else {

$array[$key] = urlencode(mb_convert_encoding($value,'UTF-8','GBK'));

}

}

return $array;

}

두 번째 유형:

인터넷에서 이거 봤는데 무한루프 문제가 있을거라는 댓글이 있었는데 이건 확실히 매우 포괄적이고 테스트한 결과 그런 일이 발생해서 참고용으로 여기에 올립니다

코드는 다음과 같습니다

/**************************************************************

*

* 使用特定function对数组中所有元素做处理

* @param string &$array 要处理的字符串

* @param string $tocode 编码后

* @param string $oldcode 编码前

* @param string $function 要执行的函数

* @return boolean $apply_to_keys_also 是否也应用到key上

* @return array $array 是否也应用到key上

* @access public

*

*************************************************************/

function encodeOperations (&$array, $function, $tocode=false,$oldcode=false,$apply_to_keys_also = false)

{

foreach ($array as $key => $value) {
(www.jb51.net)
if (is_array($value)) {

encodeOperations($array[$key], $function, $apply_to_keys_also);

} else {

if($tocode&&$oldcode) {

if(function_exists(mb_convert_encoding)) {

$value = mb_convert_encoding($value,$tocode,$oldcode);

}else{

return "error";

}

}

$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]);

}

}

}

return $array;

}


/****from:http://www.jb51.net/phper/31/66729.htm**********************************************************

*

* 将数组转换为JSON字符串(兼容中文)

* @param array $array 要转换的数组

* @return string 转换得到的json字符串

* @access public

*

*************************************************************/

function JSON($array) {

arrayRecursive($array, 'urlencode', true);

$json = json_encode($array);

return urldecode($json);

}

중국어에 대해 null이 반환되면 문자를 uft8로 변환하거나 urlencode를 사용하여 먼저 컴파일해야 합니다.

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