Случайно предположение:json_encode
очаква данни, кодирани в UTF-8, и ще покаже поведението, което описвате на всеки вход, който не е UTF-8, не-ASCII. Данните, които получавате от базата данни, вероятно са кодирани в Latin-1.
Или задайте връзката на вашата база данни на utf8
да получавате кодирани UTF-8 данни директно от базата данни (вижте UTF-8 докрай ), или използвайте (и мразя да казвам това, защото тази функция е толкова често злоупотребявана, че дори не е смешно, но е правилно приложена тук) utf8_encode
върху всички данни, които получавате от базата данни, за да ги конвертирате от Latin-1 в UTF-8.
Така че или:
// 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);
...
или:
$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);
...