如何在 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"的解决办法