带有重音字符的Json编码

时间:2018-04-03 22:06:02

标签: php mysql json mysqli encoding

我正在尝试从MySql数据库中获取数据。 这是我的代码。

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM Quotes WHERE Id=2";

if (mysqli_connect_errno()) die('Could not connect: ' . mysql_error());

$return_arr = array();
if ($result = mysqli_query($conn, $sql)) {
    while ($row = mysqli_fetch_assoc($result)) {
        $row_array['Id'] = $row['Id'];
        $row_array['Quote']= $row['Quote'];
        $row_array['Author'] = $row['Author'];
        $row_array['Category'] = $row['Category'];
        $row_array['Likes'] = $row['Likes'];
        array_push($return_arr, $row_array);
    }
}
echo json_encode($return_arr, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

mysqli_close($conn);

在网页上我没有看到任何内容,我发现问题是由于“è或”ò“等重音字符造成的。事实上当我尝试这个时:

<?php
echo "Result 1";
$return_arr = array();
if ($result = mysqli_query($conn, $sql)) {
    while ($row = mysqli_fetch_assoc($result)) {
        $row_array['Id'] = $row['Id'];
        $row_array['Quote']= $row['Quote'];
        $row_array['Author'] = $row['Author'];
        $row_array['Category'] = $row['Category'];
        $row_array['Likes'] = $row['Likes'];
        array_push($return_arr, $row_array);
    }
}
echo json_encode($return_arr, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

echo " Result 2 ";
$sql2 = "SELECT * FROM Quotes WHERE Id=2";

if (mysqli_connect_errno()) die('Could not connect: ' . mysql_error());

$return_arr2 = array();
if ($result2 = mysqli_query($conn, $sql2)) {
    while ($row = mysqli_fetch_assoc($result2)) {
        $row_array['Id'] = $row['Id'];
        $row_array['Quote']= $row['Quote'];
        $row_array['Author'] = $row['Author'];
        $row_array['Category'] = $row['Category'];
        $row_array['Likes'] = $row['Likes'];
        array_push($return_arr2, $row_array);
    }
}

echo json_encode($return_arr2, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

mysqli_close($conn);
?>

我在屏幕上看到这个结果: 结果1 [{“Id”:“1”,“引用”:“我的简单文本”,“作者”:“我”,“类别”:“X”,“喜欢”:“0”}]结果2 < / p>

我正在使用php 7.2和最新版本或MySql。 这就是我配置数据库的方式 Database structure Database simple Data for testing

更新:我更改了utf8_bin中的所有编码,但它没有任何效果。 Database encoding Columns encoding 谢谢你的关注。

2 个答案:

答案 0 :(得分:0)

尝试以UTF-8 NO BOM格式保存所有文件。例如,使用以下屏幕截图中的记事本:

enter image description here

这解决了吗?我已经遇到了这个问题......为我工作

答案 1 :(得分:0)

我解决了我的问题。 我以这种方式修改了我的代码,从而获得了所需的结果,我希望它对那些有相同问题的人有用,整个数据库都是用utf8_bin编码的。

$return_arr2 = array();
if ($result2 = mysqli_query($conn, $sql2)) {
    while ($row = mysqli_fetch_assoc($result2)) {
        $row_array['Id'] = $row['Id'];
        $row_array['Quote']= utf8_encode($row['Quote']);
        $row_array['Author'] = $row['Author'];
        $row_array['Category'] = $row['Category'];
        $row_array['Likes'] = $row['Likes'];
        array_push($return_arr2, $row_array);
    }
}

echo json_encode($return_arr2, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

我用“utf8_encode”强制utf8编码。 结果是:

结果1 [{“Id”:“1”,“引用”:“我的简单文字”,“作者”:“我”,“类别”:“X”,“喜欢”:“0”}]结果2 [{“Id”:“2”,“引用”:“我的Simplè文本与è或à”,“作者”:“我”,“类别”:“X”,“喜欢”:“0”}

我认为我只能使用JSON_UNESCAPED_UNICODE,但我更愿意保留其他人。