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

时间:2014-03-10 21:34:11

标签: php mysql arrays unicode xampp

现在我尝试在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"
    ["answer"]=>
    string(24) "เธเธฑเธ”เธเธฃเนเธญเธ"
    ["position"]=>
    string(5) "(n)
  }

我不知道为什么 回答=&#34;เธเธฑธเธเ#เ#####它应该是&#34;กัดกร่อน&#34;

但如果我没有这条线

$all_answer[] = $correct_answer; 

OR

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

如果我只使用其中一个命令而不是它都没有任何问题。 我不知道为什么? 可能有人请帮助我。

1 个答案:

答案 0 :(得分:0)

  

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

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

您正在生成没有指定编码的输出页面。在这种情况下,浏览器将尽力猜测您可能使用的编码,这非常不可靠。在您的情况下,当页面有效解释为UTF-8时,它会检测到UTF-8,而当它不是时,它会检测到cp874。据推测,您的浏览器是在泰语区域运行;其他浏览器会显示不同的废话。

整个页面必须具有单个编码,因此您无法在同一页面上使用两种编码组合字符串。如果同时包含两者,则浏览器会看到UTF8中存在一些无效的内容,因此它会回退到cp874,这会正确地呈现874中的素材,但UTF-8中的素材是无意义的。

您需要做的是确保应用程序的所有内容都明确使用相同的编码。为了理智,这种编码应该是UTF-8。在<meta charset="utf-8"/>的顶部添加<head>。保存包含UTF-8格式的非ASCII字符的所有文件。 (遗憾的是,这不是Windows应用程序(如记事本)中的默认设置。我的猜测是这是您的问题,但如果没有更多上下文,则无法确定。)以UTF-8存储数据库表,并在数据库中与您的数据库通信UTF-8。

UTF-8 all the way through