【问题标题】:Unicode PHP failingUnicode PHP 失败
【发布时间】:2018-04-25 09:52:50
【问题描述】:

我一直在尝试从我的数据库中获取聊天记录,但由于某些原因,像 ü 这样的字符被转换为 \u00。我该如何解决这个问题?

数据库已设置为 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"));

【问题讨论】:

  • 你的代码中有$db->query("SET NAMES 'utf8'");之类的东西吗?
  • 在数据库中你看对了ü?
  • @Wolen 正确,我愿意。
  • @JiriHrazdil 我使用 PDO。见编辑。

标签: php


【解决方案1】:

尝试将选项JSON_UNESCAPED_UNICODE 添加到您的json_encode

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2018-06-03
    • 1970-01-01
    • 2023-03-26
    • 2012-12-01
    相关资源
    最近更新 更多