2013-01-10 5 views
2

나는이 100 %라고 생각하는 데 사용 :PHP, "안전"JSON 배열을 인코딩하는 방법?

file_put_contents ('cacheHere', json_encode($array)); 

하지만 그건 단지 99 %입니다. utf8로 인코딩 된 데이터 만 인코딩 할 수 있습니다.

file_put_contents ('cacheHere', json_encode(utf8_encode($array))); 

$ array는 배열이 아니고 문자열이기 때문에 여전히 불만입니다. 나는 하나의 필드를 utf8로 인코딩 할 수 있다는 것을 알고 있지만 일반적인 해결책이 필요하다.

+1

여기서'json_encode()'가 정말로 필요합니까? –

+1

Pekka가 말하는 것; 어쩌면'serialize' /'unserialize'가 여기있는 것일 수 있습니다. 그리고 그것은 많은 수의 PHP 단점을 다룹니다. –

답변

4

array_walk_recursive을 사용하고 콜백 확인에서 현재 입력 항목이 is_string 인 문자열인지 확인하십시오. 그럴 경우 utf8_encode입니다. 그렇지 않으면 그대로 두십시오.

json_encode (array_walk_recursive ($array, function (&$a) { 
    if (is_string ($a)) { 
     $a = utf8_encode ($a); 
    } 
})); 
+1

+1 멋진 아이디어지만, 나는 참조 물건으로 그 패스를하는 대신 $ a를 반환하는 경향이 있습니다. – GordonM

+0

및 디코딩은 어떻습니까? :) – user1929946

+1

@ user1929946 디코딩 및 인코딩을 잊어 버리고 내 대답을 참조하십시오. – Esailija

3

일반적인 해결책은 데이터를 UTF-8로 저장하는 것입니다. utf8_encode이 효과적이라면 데이터는 실제로 ISO-8859-1로 인코딩됩니다. 전에

$mysqli->set_charset('utf8'); 

:

데이터가 데이터베이스에서 오는 경우 당신은 MySQL을 사용하는, 당신은 데이터베이스 결과가 UTF-8이 아닌 ISO-8859-1 당신에게 올 수 있도록이 작업을 수행 할 수 있습니다 모든 쿼리를 작성합니다.

이것은 하나의 예에 불과하며 데이터를 가져 오는 위치에 따라 다릅니다. UTF-8 all the way through을 참조하십시오.

+3

+1 UTF-8 모든 것 – cmbuckley

관련 문제