PHP 프로그래밍에서 배열을 연산할 때 인코딩 변환과 관련된 문제가 발생하는 경우가 있습니다.
일부 특수 문자의 표시 효과 때문에 Ajax 기술 사용으로 인해 utf-8을 GBK로 변경했는데, 인코딩 변환이라는 오래된 문제도 발생합니다.
일부 양식 유효성 검사 는 json 데이터를 반환해야 합니다. PHP의 json_encode 함수는 utf-8 인코딩만 지원하므로 iconv를 사용할 수밖에 없습니다. 원하는 효과는 GBK 배열을 utf-8 배열로 변환하여 전달하는 것입니다. json_encode 함수에.
처음에는 배열을 직렬화한 후 iconv 함수를 사용하여 인코딩을 변환한 다음 역직렬화합니다.
코드는 다음과 같습니다.
unserialize(iconv('gbk','utf-8',serialize($array)));
얻은 결과는 비어 있었습니다. 기본값은 구성 파일에 설정되어 있습니다. gbk를 사용하여 utf-8 문자열을 역직렬화하는 것은 확실히 사용하기 쉽지 않습니다. deserialization.utf-8');도 가능해야 하지만 전역 인코딩 설정이므로 데이터베이스 작업과 같은 다른 위치에서 인코딩 문제가 쉽게 발생할 수 있기 때문에 항상 약간 어색하게 느껴집니다. 그런 다음 아이디어를 변경하고 배열 프로토타입을 구성하는 직렬화 방법을 사용하고 var_export 함수를 사용합니다.
코드는 다음과 같습니다.
function array_iconv($in_charset,$out_charset,$arr){ return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';')); }
원리는 매우 간단합니다. true로 설정하면 배열 프로토타입 문자열을 반환하고 문자열을 utf-8 인코딩으로 변환한 다음 eval을 사용하여 반환을 수행합니다(익명 함수?와 유사). 그러면 문제가 완벽하게 해결됩니다.
후속 조치: 나중에 더 나은 방법이 있는지 알아보기 위해 인터넷에서 정보를 검색했습니다. 제가 찾은 것은 모두 비슷합니다. 배열에 요소가 너무 많거나 차원이 더 많으면 성능이 저하됩니다. 확실히 좋지 않을 것입니다. 더 좋은 점은 네이티브 코드 방법입니다. N차원 배열인지 연관 배열인지 고려할 필요가 없습니다. 모든 것이 자동으로 수행되므로 이전에 데이터가 일관되게 유지됩니다. 그리고 배열 변환 후. 코드의 길이와 루프와 기본 메소드 간의 비교를 통해 판단해 보면 모든 사람이 이미 선택권을 갖고 있다고 생각합니다.
위 내용은 PHP 배열 인코딩 변환 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!