从PHP特殊字符生成json文件

从PHP特殊字符生成json文件,php,json,mysqli,Php,Json,Mysqli,我有特刊。我正在尝试生成一个json文件,用作side Unity3D中的翻译文件 我是这样做的: $lang = $_GET["lang"]; header('Content-disposition: attachment; filename=da.json'); header('Content-type: text/plain'); $jsonString = "{\n"; $result = mysqli_query($con,"SELECT * FROM ReloadedSnipp

我有特刊。我正在尝试生成一个json文件,用作side Unity3D中的翻译文件

我是这样做的:

$lang = $_GET["lang"];

header('Content-disposition: attachment; filename=da.json');
header('Content-type: text/plain');

$jsonString = "{\n";

$result = mysqli_query($con,"SELECT * FROM ReloadedSnippets ORDER BY id");
while ($row = mysqli_fetch_assoc($result)){

    $snippetId = $row['id'];

    $result1 = mysqli_query($con,"SELECT * FROM ReloadedTranslations WHERE fk_snipId=$snippetId AND lang='$lang'");
    $row1 = mysqli_fetch_assoc($result1);

    $string1 = $row1["translation"];
    $string1 = mysqli_real_escape_string($con,$string1);
    $jsonString .= "   ";
    $jsonString .= '"'.$row['snippet'].'": "'.$string1.'",';
    $jsonString .= "\n";

}

$jsonString .= '}';

$jsonString = mb_convert_encoding($jsonString,'utf-8','iso-8859-1');

echo $jsonString;
它实际上做的工作是正确的,但是。。。在SublimateText中打开文件时,我看到一些奇怪的插入,就在特殊字符之前,比如丹麦字母“æå”

谁能解释一下这是什么,我是否应该担心?最重要的是。。。我该怎么解决这个问题呢

感谢您的帮助:-)

尝试更改:

$jsonString = mb_convert_encoding($jsonString,'UTF-8',mb_detect_encoding($jsonString));
并添加标题

header('Content-type: text/plain; charset=utf-8');

虽然您当然可以手动生成JSON,但我建议您改用内置的
JSON\u encode
php函数(请参阅)。该函数将处理必须像引号一样转义的最终字符

不直接生成json字符串,而是生成对象表示,然后将其转换为字符串:

$jsonData = [];
$result = mysqli_query($con, "SELECT * FROM ReloadedSnippets ORDER BY id");
while ($row = mysqli_fetch_assoc($result)) {
    $snippetId = $row['id'];

    $result1 = mysqli_query($con,"SELECT * FROM ReloadedTranslations WHERE fk_snipId=$snippetId AND lang='$lang'");
    $row1 = mysqli_fetch_assoc($result1);

    $string1 = $row1["translation"];
    $string1 = mysqli_real_escape_string($con,$string1);
    $jsonData[$row['snippet']] = $string1;
}

$jsonString = json_encode($jsonData);
echo $jsonString;

为什么不使用内置方式
json\u encode()
而不是自己生成json?这种方法将使JSON转义。好吧,尝试过这种方法,但只要字符串有一个特殊字符(æøå),它就会显示为“null”。我同意这是最好的解决方案,但我不知道如何让它工作:-/@Mansa看起来输入文本中有一些不可编码的字符,或者这些字符已经写入数据库。也许你可以尝试使用
mysqli\u set\u字符集($link,“utf8”)
来强制进行utf8-mysql连接。好的,现在一切都完成了。。。它从头到尾都是“utf8”,但还是一样吗?