现在我尝试在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;
}
如果我只使用其中一个命令而不是它都没有任何问题。 我不知道为什么? 可能有人请帮助我。
答案 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。