【问题标题】:how to use UTF-8 in PHP:json_encode如何在 PHP:json_encode 中使用 UTF-8
【发布时间】: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();
}
?>

【问题讨论】:

标签: php mysql json pdo utf-8


【解决方案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);
        }
    

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      相关资源
      最近更新 更多