중국어로 표시된 json 데이터 반환 문제
이전 글에서는 json 형식으로 반환된 중국어가 u5723u8bdeu8282u5343u4e07u597du793cu5927u5949u9001로 표시됩니다
해결책 1:
함수 공지(){
'./include/conn.php' 포함; //데이터베이스 링크 파일
$sql_notice = mysql_query('SELECT * FROM gg_notice where 활성화 = "1" 제한 0,10');
$notice = mysql_fetch_array($sql_notice, MYSQL_ASSOC);
$str = json_encode($notice);
//리눅스
return preg_replace("#\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\1')) ", $str);
//창
//preg_replace("#\u([0-9a-f]{4})#ie", "iconv('UCS-2LE', 'UTF-8', pack('H4', '\1' 반환) ))", $str);
}
?>
인터넷에서 검색한 다른 방법
/**
* json 생성, 분석은 중국어 지원
*/
클래스 Json_Helper {
/**
* json 생성
*/
공개 정적 함수 인코딩($str){
$json = json_encode($str);
//리눅스
return preg_replace("#\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\1')) ", $json);
//창
//preg_replace("#\u([0-9a-f]{4})#ie", "iconv('UCS-2LE', 'UTF-8', pack('H4', '\1' 반환) ))", $json);
}
/**
* json 분석
*/
공개 정적 함수 디코드($str) {
return json_decode($str);
}
}
?>
인터넷 검색으로 찾은 또 다른 관련 글입니다
PHP와 함께 제공되는 json_encode를 사용하여 데이터를 인코딩하면 중국어 문자가 유니코드로 변환되어 읽을 수 없게 됩니다. 예를 들어 문자열 "Xiamen"을 json_encoding하면 출력은 "u53a6u95e8"입니다.
확인 후 두 가지 방법이 있습니다.
1. "u53a6u95e8"을 "Xiamen"으로 복원하고 다음 코드를 사용합니다.
$str= preg_replace("#\u([0-9a-f] )#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\1'))" , $str);
2. 먼저 중국어 필드를 urlencode 및 json_encode한 다음 urldecode를 사용하여 중국어를 표시합니다.
$code = urldecode(json_encode(urlencode("샤먼")));
PHP 버전 5.4에는 Json에 JSON_UNESCAPED_UNICODE라는 새로운 옵션이 추가되었습니다. 이 옵션을 추가하면 중국어가 자동으로 인코딩되지 않습니다.
echo json_encode("샤먼", JSON_UNESCAPED_UNICODE);
게다가 json_encode와 json_decode는 UTF-8로 인코딩된 문자만 지원하므로 GBK 문자를 JSON으로 변환해야 합니다. 제가 작성한 GBK에서 UTF-8로의 변환 코드를 첨부합니다.
/*
GBK 문자열 트랜스코딩은 UTF-8로 변환되고, 숫자는 숫자로 변환됩니다.
*/
함수 ct2($s){
If(is_numeric($s)) {
반환 간격($s);
} 그 밖의 {
return iconv("GBK","UTF-8",$s);
}
}
/*
일괄 처리 gbk->utf-8
*/
함수 icon_to_utf8($s) {
if(is_array($s)) {
foreach($s as $key => $val) {
$s[$key] = icon_to_utf8($val);
}
} 그 밖의 {
$s = ct2($s);
}
$s 반환;
}
echo json_encode(icon_to_utf8("샤먼"));