如何在 PHP:json_encode 中使用 UTF-8

Posted

技术标签:

【中文标题】如何在 PHP:json_encode 中使用 UTF-8【英文标题】:how to use UTF-8 in PHP:json_encode 【发布时间】:2015-09-24 10:53:55 【问题描述】:

我从 mysql 获取数据并使用 php 以 json 格式显示,但我的数据是波斯语,它显示 ? 字符而不是原始数据 如下所示。

"allnews":["id":"35","Onvan":"?????? ?????? ????? ????? ?????? ?? ?? ?????","id":"36","Onvan":"?????????? ??? ? ????????????? ?????","id":"37","Onvan":" ??????? ??? ??? ??? ??? ??? ?? ??? ?? ??? ??? ?????? ??? ??? ?????? ?? ","id":"38","Onvan":" ????? ?????? ??? ??? ?? ?? ?????? ????????","id":"39","Onvan":"??? ??? ??? ????"]

这是我的代码。你能检查一下哪里出错了。

<?php
$hostname='localhost';
$username='xxxxxxxxx';
$password='xxxxxxxxx';
$response = array();
try 

    $dbh=new PDO("mysql:host=$hostname;dbname=dbtest",$username  ,$password);

    $response["allnews"] = array();

    /*** QUERY ****/
    $sql='SELECT * FROM test';

    $stmt=$dbh->query($sql);

    $objs = $stmt->fetchAll(PDO::FETCH_OBJ);

    foreach($objs as $object) 
        $news = array();        
        $news["id"]=$object->id;
        $news["Onvan"]=$object->title;

        array_push($response["allnews"], $news);
    

    echo json_encode($response);

    /*** close connection ***/
    $dbh=null;

catch(PDOException $e) 
 echo $e->getMessage();

?>

【问题讨论】:

我要问,你确定它们在数据库中存储正确吗? 是的,ekhteraat.com/app/db.png 【参考方案1】:

使用

header("Content-type: application/json; charset=utf-8");

就在之前

echo json_encode($response);

还有可能是Mysql Fetching Error

所以换行

$dbh=new PDO("mysql:host=$hostname;dbname=dbtest",$username  ,$password);

$dbh=new PDO("mysql:host=$hostname;dbname=dbtest;charset=utf8",$username  ,$password);

【讨论】:

json_encode()之前做print_r($response),如果它不可读,那么它是mysql获取问题。 返回 --> ثرÙت Ú©Ùا٠Ùخترع Ø§Ø³Ù¾Ø±Û Ø¯Ø§Ùرا٠در جا٠جÙاÙÛ $dbh=new PDO("mysql:host=$hostname;dbname=dbtest;charset=utf8",$username ,$password);替换行$dbh=new PDO("mysql:host=$hostname;dbname=dbtest",$username ,$password); 我替换但不起作用,返回 --> ثرÙت Ú©Ùا٠Ùخترع Ø§Ø³Ù¾Ø±Û Ø¯Ø§ÙØ±Ø§Ù Ø¯Ø ± جا٠جÙاÙÛ 我在数据库中的正确数据-> ثروت کلان مخترع اسپری داوران در جام جهانی | print_r 返回 - > ثرÙت Ú©Ùا٠Ùخترع Ø§Ø³Ù¾Ø±Û Ø¯Ø§Ùرا٠در جا٠جÙاÙÛ | json_encode retern -> \u00d8\u00ab\u00d8\u00b1\u00d9\u0088\u00d8\u00aa \u00da\u00a9\u00d9\u0084\u00d8\u00a7\u00d9\u0086\u00d9\u0085\u00d8\u00a9\u00d9\u00a7\u00d9\u0085\u00d8\u00a \u00b1\u00d8\u00b9 \u00d8\u00a7\u00d8\u00b3\u00d9\u00be\u00d8\u00b1\u00db\u008c \u00d8\u00af\u00d8\u00a7\u00d9\u0088\u00d8\u000b7\u00d8\u000b7\u00d8\u000d66a \u00d8\u00af\u00d8\u00b1 \u00d8\u00ac\u00d8 ....【参考方案2】:

最佳且简单的解决方案

$dbh=new PDO("mysql:host=$hostname;dbname=dbtest",$username  ,$password);

将字符集添加到上面的行中,例如 (mysql:charset=utf8mb4;)

$dbh=new PDO("mysql:charset=utf8mb4;host=$hostname;dbname=dbtest",$username  ,$password);

【讨论】:

【参考方案3】:

你可以使用 utf8_encode(String)

foreach($objs as $object) 
        $news = array();        
        $news["id"]=utf8_encode( $object->id);
        $news["Onvan"]=utf8_encode( $object->title);

        array_push($response["allnews"], $news);
    

【讨论】:

以上是关于如何在 PHP:json_encode 中使用 UTF-8的主要内容,如果未能解决你的问题,请参考以下文章

php json_encode中提示的中文总是返回"u767bu5f55u6210u529fuff01"的解决办法

使用PHP json_encode时输出阿拉伯语(Unicode)字符

PHP json_encode 中文乱码

PHP json_encode中文乱码解决方法

如何在 PHP:json_encode 中使用 UTF-8

PHP - json_encode中文乱码