组合两个数组后出现Unicode错误


Unicode error after combine two arrays

现在我试着在XAMPP上创建php英语词汇练习

这是我的代码

  $correct_answer = get_correct_answer_by_id($question['id']);
$wrong_answer = get_wrong_answer_by_unit($lesson_number);
$all_answer[] = $correct_answer;    
while($w_ans = mysqli_fetch_assoc($wrong_answer))
{
$all_answer[] = $w_ans;
}
echo '<pre>';
var_dump($all_answer);
echo '</pre>';

这是结果

array(4) 
  {
  [0]=>
  array(5) {
    ["id"]=>
    string(1) "4"
    ["vocab"]=>
    string(7) "erosion"
    ["unit"]=>
    string(1) "1"
    ["answerswer"]=>
    string(24) "เธเธฑเธ”เธเธฃเนเธญเธ"
    ["position"]=>
    string(5) "(n)
  }
我不知道为什么回答= "เธเธฑเธ"เธเธฃเนเธญเธ"应该是"กัดกร่อน"

但是如果没有这一行

$all_answer[] = $correct_answer; 

while($w_ans = mysqli_fetch_assoc($wrong_answer))
{   
$all_answer[] = $w_ans;
} 

如果我只使用其中一个命令,而不是两个,它不会有任何问题。我不知道为什么?

如果我只使用其中一个命令,而不是两个命令,它不会有任何问题。

您有两个使用不同字节编码存储的字符串。其中之一是UTF-8;另一个在代码页874 (Windows legacy Thai)中。เธเธฑเธ”เธเธฃเนเธญเธ是当您使用UTF-8编码的字符串กัดกร่อน并将其误解为cp874时得到的。

您正在生成一个没有指定编码的输出页。在这种情况下,浏览器会尽力猜测您可能使用的编码,这是相当不可靠的。在您的示例中,当页面被解释为UTF-8有效时,它检测UTF-8,当页面被解释为UTF-8无效时,它检测cp874。假定您的浏览器运行在泰国语言环境中;其他浏览器会显示不同的无意义内容。

整个页面必须有一个编码,所以你不能在同一页面上使用两个编码组合字符串。当您同时包含这两种内容时,浏览器会发现有一些utf8中无效的内容,因此它会返回到cp874, cp874会正确地呈现874中的内容,但UTF-8中的内容则是无意义的。

您需要做的是确保应用程序的所有内容都显式地使用相同的编码。为了合理起见,这种编码应该是UTF-8。在<head>的顶部包含一个<meta charset="utf-8"/>。将包含非ascii字符的文件保存为UTF-8格式。(遗憾的是,这不是记事本等Windows应用程序的默认设置。我猜这是你的问题,尽管在没有更多背景的情况下无法确定。)使用UTF-8存储数据库表,并使用UTF-8与数据库通信。

UTF-8一直到