This question already has answers here:
UTF-8 all the way through
(15个答案)
三年前关闭。
我有一个PHP脚本,它连接到数据库,并将下载的信息转换为JSON。
问题是,它正确地显示了像“é’!”这样的字符(é=\u00c9),但是对于字符“ő”,它只显示了一个“?”相反。
我试着切换MySQL数据库的字符集,但那没什么用。
下面是我使用的代码:
<?php
    header('Content-Type: application/json; Charset=UTF-8');
    $connection = mysqli_connect("localhost","root","","imreigye_wp") or die("Error " . mysqli_error($connection));

    $sql = "select * from utca";
    $result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));

    $utcaarr = array();     while($row =mysqli_fetch_assoc($result))
    {       foreach(array_keys($row) as $key){      $row[$key] = iconv("ISO-8859-2", "UTF-8", $row[$key]);      }
                $utcaarr[] = $row;
    }
    echo json_encode($utcaarr);

    mysqli_close($connection); ?>

注意:我对rows数组使用iconv,因为JSON只接受UTF-8
编辑:我设法让它工作了。我的数据库现在使用“utf8mb4”字符集。我删除了将下载信息转换为UTF-8的部分代码,并将MySQL连接的字符集设置为“utf8mb4”。
这是我更新的代码:
<?php
    header('Content-Type: application/json; Charset=UTF-8');
    $connection = mysqli_connect("localhost","root","","imreigye_wp") or die("Error " . mysqli_error($connection));
    mysqli_set_charset($connection, 'utf8mb4');

    $sql = "select * from utca";
    $result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));

    $utcaarr = array();
    while($row =mysqli_fetch_assoc($result))
    {
        $utcaarr[] = $row;
    }
    echo json_encode($utcaarr);

    mysqli_close($connection);
?>

最佳答案

是的,JSON只是utf-8。如果在数据库中更改了字符集,则值保持不变,因此无关紧要。
首先,尝试从另一个表中选择,但是使用新数据,转换为utf-8。
其次,尝试utf8解码($row[$key]);

关于php - PHP,JSON和MySQL中的特殊字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35959745/

10-12 00:20
查看更多