2017-11-12 22 views
0

私は自分のデータベースからチャットログを取得しようとしていますが、何らかの理由でüのような文字が\ u00に変換されます。これをどうすれば解決できますか?ユニコードPHPが失敗する

データベースはすでにUTF-8に設定されているため、ヘッダも同様です。

コード:

$sql = $db->query("SELECT * FROM `messages` ORDER BY `id` DESC LIMIT 50"); // lol 
$row = $sql->fetchAll(PDO::FETCH_ASSOC);  

$messages = array(); 
foreach($row as $value){ 
    array_push($messages, $value); 
} 

exit(json_encode($messages)); 

PDO接続、

$db = new PDO('mysql:host=localhost;dbname=xxx', 'xxx', 'xxx', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 
+0

あなたのコードに '$ db-> query(" SET NAMES 'utf8' ");'のようなものがありますか? –

+0

データベースで正しく '' 'ü'''と表示されますか? – Wolen

+0

@ウォレン正解、します。 –

答えて

0

は、あなたのjson_encodeにオプションJSON_UNESCAPED_UNICODEを追加してみてください。

json_encode($row, JSON_UNESCAPED_UNICODE) 

違い:

php > $row = ['ü']; 
php > var_dump(json_encode($row)); 
string(10) "["\u00fc"]" 
php > var_dump(json_encode($row, JSON_UNESCAPED_UNICODE)); 
string(6) "["ü"]" 

デモ:https://eval.in/898350

は、セキュリティへの影響については、この答えを参照してください。 https://stackoverflow.com/a/16584167/5873008

関連する問題