2009-09-08 16 views
9

json_encode() nie będzie działać dla mnie, gdy używam åäö. Czemu? I jak mogę go uruchomić?Jak uzyskać json_encode() do pracy z ISO-8859-1 (åäö)

php:

echo json_encode($arr); 

javascript:

var theResponse = JSON.parse(xmlHttp.responseText); 

Kiedy alert() odpowiedź, a odpowiedź zawiera A, A lub O, odpowiedź jest = NULL

proszę , pomóż mi ...

+0

Jakie są wyniki wyjściowe?Z której biblioteki JSON korzystasz? –

+0

Wyjście to "NULL", jeśli zawiera å, ä lub ö. Biblioteka JSON to http://www.JSON.org/json2.js – Johan

+3

Jakiej wersji PHP używasz? Wierzę, że wczesne wersje 'json_encode()' poprawnie obsługiwały tylko łańcuchy UTF-8. Wypróbuj 'utf8_encode'-ing łańcucha przed kodowaniem i zobacz, czy to działa. –

Odpowiedz

7

Jak wspomniał Greg, musiałem kodować ååö do UTF-8. Ale nie użyłem iconv ani mbstringa. Kiedy I utf8_encode() wszystkie wartości przed wprowadzeniem wartości do array problem został rozwiązany.

+1

Mam do czynienia z podobnym problemem, w którym mam tablicę asocjacyjną, która musi zostać zakodowana. Próbowałem 'array_walk_recursive()' z 'if (is_string ($ input)) {return utf_encode ($ input); } else {return $ input} 'dla wywołania zwrotnego, ale to nie działa. Jakieś pomysły? – Anticom

+0

@Anticom moje rozwiązanie poniżej sortuje to. –

0

standardową metodą przy odczycie z mysql

$resultArray = array(); 
while($obj = MySQL_fetch_object($res)) { 
$resultArray[] = $obj; 
} 
$result = json_encode($resultArray); 

kodowanie może być wykonywane przy użyciu następujących:

$resultArray = array(); 
while($obj = MySQL_fetch_object($res)) { 
foreach($obj as $key => $value) { 
    if (!is_null($value)) { 
    $obj->$key = utf8_encode($value); 
    } 
} 
$resultArray[] = $obj; 
} 
$result = json_encode($resultArray); 

The if is_null musi zostać uwzględniony tak, niewypełnione (na przykład, data i godzina pola) pozostają puste na wyjściu.

2

JSON definiuje ciągi znaków jako Unicode!

JSON Definition

trzeba kodować ci ISO na UTF-8

0

$data (w moim przypadku) jest tablicą o wartościach tekstowych jak ISO-8859-1. Poniższy trik przygotowuje $data do użycia z json_encode.

function toUtf8(&$v, $k) { 
    $v = utf8_encode($v); 
} 
array_walk_recursive($data, 'toUtf8'); 
4

Ta funkcja rzuci poprawny typ danych dla wyjścia JSON i utf8_encode ciągów.

/* Change data-type from string to integar or float if required. 
    * If string detected then utf8_encode() it. */ 
    function cast_data_types ($value) { 
     if (is_array($value)) { 
     $value = array_map('cast_data_types',$value); 
     return $value; 
     } 
     if (is_numeric($value)) { 
     if(strpos('.', $value)===false) return (float)$value; 
     return (int) $value; 
     } 
     return utf8_encode((string)$value); 
    } 

json_encode (cast_data_types($data)); 
+0

Pracowałem w moim przypadku. Dzięki. – plocks

0

Stare pytanie, ale pomyślałam, że mogę umieścić to tutaj, w przypadku gdy ktoś potrzebuje danych przy użyciu json_encode do logowania, ale zachować dane nienaruszone, nietknięte do wglądu później.

Można zakodować surowe dane za pomocą base64_encode, a następnie będzie działać z json_encode. Później po uruchomieniu json_decode możesz dekodować ciąg znaków za pomocą base64_decode, otrzymasz oryginalne dane niezmodyfikowane.

Powiązane problemy