PHP,JSON和MySQL中的特殊字符

时间:2016-03-12 15:45:29

标签: php mysql json

我有一个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); ?>

注意:我对行数组使用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);
?>

3 个答案:

答案 0 :(得分:0)

是的,JSON只是utf-8。如果您更改了数据库中的字符集,则值保持不变,因此无关紧要。

首先,尝试从另一个表中选择,但是使用新数据,转换为utf-8。

其次,尝试utf8_decode($ row [$ key]);

答案 1 :(得分:0)

如果您计划通过JSON传输它们,则需要对它们进行编码。

$array = array('nome'=>'Paição','cidade'=>'São Paulo');

$array = array_map('htmlentities',$array);

//encode
$json = html_entity_decode(json_encode($array));

//Output: {"nome":"Paição","cidade":"São Paulo"}
echo $json;

答案 2 :(得分:0)

UTF-8 all the way trough完成这项工作!您需要为数据库设置utf8mb4字符集,并为您的连接设置相同的字符串。