2014-09-26 21 views
0

在我的mysql数据库表有UTF-8字符(我的表核对是utf8_unicode_ciLaravel,PHP:json_encode给出不同的结果在Laravel和原材料PHP

অà§à¦¯à¦¾à¦¸à¦¿à¦¡à¦¿à¦¤à¦¿ কমিয়ে উরà§à¦¬à¦°à¦¤à¦¾ ফিরিয়ে আনতে কোনটি বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হয়? 

现在,当我得到。使用Laravel模式表列和json_encode的数据,我得到

"\u00e0\u00a6\u2026\u00e0\u00a7\u008d\u00e0\u00a6\u00af\u00e0\u00a6\u00be\u00e0\u00a6\u00b8\u00e0\u00a6\u00bf\u00e0\u00a6\u00a1\u00e0\u00a6\u00bf\u00e0\u00a6\u00a4\u00e0\u00a6\u00bf \u00e0\u00a6\u2022\u00e0\u00a6\u00ae\u00e0\u00a6\u00bf\u00e0\u00a7\u0178\u00e0\u00a7\u2021 \u00e0\u00a6\u2030\u00e0\u00a6\u00b0\u00e0\u00a7\u008d\u00e0\u00a6\u00ac\u00e0\u00a6\u00b0\u00e0\u00a6\u00a4\u00e0\u00a6\u00be \u00e0\u00a6\u00ab\u00e0\u00a6\u00bf\u00e0\u00a6\u00b0\u00e0\u00a6\u00bf\u00e0\u00a7\u0178\u00e0\u00a7\u2021 \u00e0\u00a6\u2020\u00e0\u00a6\u00a8\u00e0\u00a6\u00a4\u00e0\u00a7\u2021 \u00e0\u00a6\u2022\u00e0\u00a7\u2039\u00e0\u00a6\u00a8\u00e0\u00a6\u0178\u00e0\u00a6\u00bf \u00e0\u00a6\u00ac\u00e0\u00a7\u008d\u00e0\u00a6\u00af\u00e0\u00a6\u00ac\u00e0\u00a6\u00b9\u00e0\u00a6\u00be\u00e0\u00a6\u00b0 \u00e0\u00a6\u2022\u00e0\u00a6\u00b0\u00e0\u00a6\u00be \u00e0\u00a6\u00b9\u00e0\u00a7\u0178? " 

但如果我取纯PHP使用mysqli的准备语句中的列和使用json_encode,我得到

"\u0985\u09cd\u09af\u09be\u09b8\u09bf\u09a1\u09bf\u09a4\u09bf \u0995\u09ae\u09bf\u09df\u09c7 \u0989\u09b0\u09cd\u09ac\u09b0\u09a4\u09be \u09ab\u09bf\u09b0\u09bf\u09df\u09c7 \u0986\u09a8\u09a4\u09c7 \u0995\u09cb\u09a8\u099f\u09bf \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09be \u09b9\u09df? " 

我想这个JSON,但laravel产生一个又一个。

Laravel代码:

app/config/database.php 
'charset' => 'utf8', 
'collation' => 'utf8_unicode_ci', 

//Model 
class Problem extends \Eloquent { 
    protected $fillable = []; 
    public $timestamps = false; 
    protected $table = 'problems'; 

} 
// Controller function 
public function test() 
{ 
    $tmp = Problem::find(33551); 
    return json_encode($tmp['body']); 
} 

纯PHP代码:

$sql = "SELECT body FROM problems WHERE id = ?"; 
$id = 33551; 
$statement = $mysqli->prepare($sql); 
$statement->bind_param("i", $id); 
$statement->execute(); 
$ret = ""; 
$statement->bind_result($ret); 
$statement->fetch(); 
echo json_encode($ret); 

为什么json_encode在laravel工作这么奇怪。我怎么解决这个问题 ?
我使用Laravel 4.2
请帮助...

+0

我觉得你应该先尝试得到的结果正确编码..升级到PHP 5.4,如果你有以前的版本,并使用json_encode($沤,JSON_UNESCAPED_UNICODE);获取UTF8编码的json – montexristos 2014-09-26 08:17:42

+0

我使用PHP 5.5,JSON_UNESCAPED_UNICODE给出了“à|...à§à|¯à|¾à|¸à.........”,但我想要“\ u0985 \ u09cd \ u09af \ u09be ........“ – palatok 2014-09-26 08:23:02

+0

获得”à|...à§à|¯à|¾à|¸à.........“是否正常?也许你的数据有问题吗?我将重点放在这一点上,因为如果您的数据在第一时间出错,您将无法解决验证数据的问题。如果您在mysql终端或phpmyadmin中运行查询,是否会正确编码结果?如果不检查主体列是否也有utf8_unicode_ci排序规则并尝试重新插入数据 – montexristos 2014-09-26 08:30:59

回答

0

没有与json_encode没有什么区别,你应该检查你从两个途径得到的结果,

Problem::find(33551)不会得到列“体“,它会得到整个行(一个对象)与ID 33551 ..

你应该尝试var_dump($ tmp),看看你有什么。

使用get柱体$tmp->body

+0

我使用$ tmp ['body']来获得column body.That与$ tmp-> body相同,对吗? – palatok 2014-09-26 08:20:00

+0

不,问题:: find(33551)是一个对象而不是数组 – 2014-09-26 08:22:33

+0

我刚刚用$ tmp-> body尝试过,结果相同。 – palatok 2014-09-26 08:24:36

相关问题