2015-11-02 57 views
1

我有以下函数来获取一个语言字符串,它适用于英语而不是葡萄牙语字符。PHP - 数据库结果编码?

public function GetAllLanguageStrings($langid) 
    { 
     $GLOBALS['mysqli']->query("use " . $GLOBALS['db_name']); 
     $stmt = $GLOBALS['mysqli']->prepare("SELECT lang_identifier, text FROM lang_strings WHERE lang_id = ?"); 
     $stmt->bind_param("i", $langid); 
     $stmt->execute(); 
     $stmt->bind_result($identifier,$text); 
     $result = array("LangStrings" => array()); 

     while ($stmt->fetch()) { 
      array_push($result['LangStrings'], array("Identifier" => $identifier, "Text" => $text)); 
     } 

     return json_encode($result, JSON_PRETTY_PRINT); 
     $stmt->close(); 
    } 

结果变成是

{ "Identifier": "LOGIN_INFORMATION", "Text": "Informa\u00e7\u00f5es de Login." } 

代替

{ "Identifier": "LOGIN_INFORMATION", "Text": "Informações de Login." } 

我尝试添加以下设置怪异:

$mysqli->query("SET NAMES utf8"); 
$mysqli->query("SET CHARACTER SET utf8"); 
$mysqli->set_charset("utf8"); 

,但什么都没有改变。

回答

1

JSON_UNESCAPED_UNICODE标志可能是你正在寻找的。

有关json_encode如何输出数据以及如何通过设置右标志来操作输出的详细信息,请参阅this explanation

+0

更好: { “标识”: “LOGIN_INFORMATION”, “文”: “InformaçÃμes日登录”}, – EchO

+0

以及为文字存储为UTF8 IM的分贝? –

+0

看起来很像它:http://www.fileformat.info/info/unicode/char/00E7/index.htm你真正结束了正确的编码值。网络服务器是否返回utf8编码的内容?检查标题。文档中是否指定了另一个字符集? –

0
return utf8_decode(json_encode($result, JSON_UNESCAPED_UNICODE)); 
比以前,但仍然