이 기사의 예에서는 PHP에서 json_encode 함수를 사용할 때 중국어를 이스케이프 처리하지 않는 솔루션을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 방법은 다음과 같습니다.
json_encode 함수는 gbk의 한자를 변환하거나 공백으로 직접 변환하지 않습니다. 이 기사는 json 이스케이프되지 않은 중국어 문제를 처리하는 방법에 대한 몇 가지 팁을 제공할 것입니다.
PHP와 함께 제공되는 json_encode() 함수를 호출하면 중국어 문자가 나타나면 중국어 문자가 이스케이프됩니다. 예:
echo json_encode(array('Hello'));
// 출력: ["u4f60u597d"]
이는 횡설수설하는 말처럼 매우 짜증나는 일입니다. JSON 표준에서는 ASCII가 아닌 문자를 이스케이프 처리하지 않는다고 말합니다.
이 이스케이프를 비활성화하는 방법은 무엇입니까? 대답은 PHP 자체 json_encode()가 이 기능을 비활성화할 수 없다는 것입니다(버전 5.4.0 이전에는 JSON_UNESCAPED_UNICODE 옵션을 추가할 수 있음). 이를 위해 새 JSON 라이브러리로만 변경할 수 있습니다. 간단하게 json_encode()를 구현하기 위해 수십 줄의 코드를 작성했습니다.
class Util
{
정적 함수 json_encode($input){
//PHP 5.4.0부터 이 옵션이 추가되었습니다.
If(정의됨('JSON_UNESCAPED_UNICODE')){
return json_encode($input, JSON_UNESCAPED_UNICODE);
}
If(is_string($input)){
$text = $input;
$text = str_replace('\', '\\', $text);
$text = str_replace(
배열("r", "n", "t", """),
array('r', 'n', 't', '\"'),
$text);
'"' 반환 . $text . '"';
}else if(is_array($input) || is_object($input)){
$arr = 배열();
$is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1));
foreach($input as $k=>$v){
If($is_obj){
$arr[] = self::json_encode($k) . ':' . self::json_encode($v);
}else{
$arr[] = self::json_encode($v);
}
}
if($is_obj){
'{'를 반환합니다. Join(',', $arr) '}';
}그밖에{
'[' 를 반환합니다. Join(',', $arr) ']';
}
}그 외{
$input '';
을 반환합니다.
}
}
}
연관배열(is_obj) 판단 등 고려하지 않은 사항은 문제가 발생하면 이야기하자. 클래스가 마음에 들지 않으면 직접 순수 함수로 변환하고 이름을 바꾸면 된다.
이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.