我几乎完成了对我的网络应用程序进行大修的任务,以便正确地“识别UTF-8”。但我发现,如果我使用utf8
将连接字符集设置为mysqli_set_charset
,结果是输出显示不正确(实际上看起来好像页面的字符编码被错误识别),而如果我不设置连接字符集,它会正确显示。
例如,如果我不设置连接,则存储在我的数据库中的一个表中的字符串 - 列的字符集为utf8
- 正确回显为Página principal
字符集。如果我执行设置连接字符集,它将显示为Página principal
。
详细信息:我用来测试此行为的PHP脚本在<head>
部分中包含以下元标记:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
我已确定主机上新连接的默认字符集为latin1
。我要连接的数据库具有默认字符集utf8
。以下是用于创建数据库链接的代码:
$cxn = @mysqli_connect('localhost', $db_user, $db_password, $db_database) or die('Failed to connect to the database.');
mysqli_set_charset($cxn, 'utf8');
mysqli_query($cxn, 'SET SESSION sql_mode = \'TRADITIONAL\'');
此外:如果它应该作为一些额外的取证证据,我发现如果我在Firefox中查看页面并手动将字符编码更改为ISO-8859-1
,则上述字符串显示为Página principal
答案 0 :(得分:1)
这可能是因为插入数据时字符编码不同,因此可能存储错误的编码(表编码设置为utf8?)。检查新插入的数据是否正常返回。 (使用utf8连接插入的Aka数据)