Losowe zgadywanie:json_encode
oczekuje danych zakodowanych w UTF-8 i będzie wykazywał zachowanie, które opisujesz, na każdym wejściu innym niż UTF-8 i ASCII. Dane, które otrzymujesz z bazy danych, są prawdopodobnie zakodowane w języku Latin-1.
Ustaw połączenie z bazą danych na utf8
do odbierania danych zakodowanych w UTF-8 bezpośrednio z bazy danych (zobacz UTF-8 przez całą drogę ) lub użyj (i nienawidzę tego mówić, ponieważ ta funkcja jest tak często nadużywana, że nawet nie jest zabawna, ale jest tutaj poprawnie zastosowana) utf8_encode
na wszystkich danych, które otrzymujesz z bazy danych, aby przekonwertować je z Latin-1 na UTF-8.
Więc albo:
// set the connection charset
mysql_set_charset('utf8');
$result = mysql_query("SELECT post_status, post_title FROM wp_posts");
$data = array();
while ($row = mysql_fetch_assoc($result)) {
$data['posts'][] = $row;
}
$json_string = json_encode($data);
...
lub:
$result = mysql_query("SELECT post_status, post_title FROM wp_posts");
$data = array();
while ($row = mysql_fetch_assoc($result)) {
$row = array_map('utf8_encode', $row);
$data['posts'][] = $row;
}
$json_string = json_encode($data);
...