2012-09-12 88 views
2

我正在尝试从MySQL数据库中获取数据JSON_encode。 DB中的字符是应该的。用PHP输出UTF-8特殊字符

例如,一些数据包含此:è

当我打印出来到浏览器,这是我得到的是具有特殊字符的所有项目:

{"category":null} 

这里是代码的非常基本淡化的版本我使用的测试:

$sql = mysql_query("SELECT category FROM master_cat ORDER BY category ASC"); 
    while ($row = mysql_fetch_assoc($sql)) 
     $output[] = $row; 

print(json_encode($output)); 

我怎样才能得到实际的数据出现在BR owser当我阅读网页上的JSON而不是null

+0

这是一个非常基本的淡化版本,如果你能得到'$输出[] = $ row'和'json_encode($输出)'导致'{ “类别”:空} ' – dbf

回答

4

您可以在文本字段上使用utf8_encode,但是您可以检查数据是否确实存在?也许用HTML输出数据而不是JSON编码呢?因为在我的系统上,UTF8被识别,出错或者一些字符被截断。

缺失数据库数据的空气味。

如果数据是存在的,那么:

mysql_query('SET NAMES utf8;'); 
$sql = mysql_query("SELECT category FROM master_cat ORDER BY category ASC"); 
while ($row = mysql_fetch_assoc($sql)) 
    $output[] = array_map('utf8_encode', $row); 

print(json_encode($output)); 

您可能需要显式指定的MIME类型和字符集太:

Header('Content-Type: application/json; charset=UTF-8'); 

看到What is the correct JSON content type?

+0

我确实知道数据在那里。如果我用e代替,它就会出现。 – KickingLettuce

+1

@KickingLettuce:还要确保MySQL设置为UTF-8模式或类似模式。 –

+0

斑点,@YannRamin!加入回答。 – LSerni

2

您应该使用JSON_UNESCAPED_UNICODE来按字面顺序编码多字节Unicode字符(默认为\ uXXXX)。自PHP 5.4.0起可用。 在这种情况下:

echo json_encode($output, JSON_UNESCAPED_UNICODE);