2

我有一个非常奇怪的行为,我正在经历。当我使用 UTF8 字符(特别是 'ő' 或 'ű' 匈牙利字符)运行 insert into 时,它会插入一个 ? 而不是字符。但是,如果我在传入查询之前将其回显,它会显示正确的字符。

我做了什么:

  • 我已将 mysql 表和数据库中的所有可能的排序规则、字符集设置为 UTF8。
  • 我打过电话mysql_query("SET NAMES 'UTF8'");
  • 我打过电话mysql_query("SET CHARACTER SET UTF8");
  • 我已将网站编码设置为:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

什么按预期工作:

  • PHPMyAdmin
  • 回显表格中的特殊字符

它在本地主机服务器上工作。非本地服务器的默认编码是 ISO-8859-1,我无法更改。

4

1 回答 1

1

如果你

1 - 设置utf-8包含表单的 html 页面的 lang 编码
2 - 仅使用表单将输入输入到相关的 MySQL db 表中
3 - 将所有排序规则设置为utf8_unicode_ciMySQL(表和行排序规则)
4 - 如果您有权限还可以将您的 MySQL 数据库排序规则设置为 utf8_unicode_ci

那么你也不会在你的 mySQL 记录中看到实体

这是我使用的解决方案,并且对我的母语没有任何问题,它也有很多 unicode 字符。

下面我向您介绍我的数据库连接 php 代码和推荐(通过使用准备好的语句;请查看http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

//mysql bağlantısı
global $db_baglanti;
$db_baglanti = new mysqli(vt_host, vt_user, vt_password, vt_name);
if ($db_baglanti->connect_errno) 
{
    echo "MySQL bağlantısı kurulamadı: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

if (!$db_baglanti->set_charset("utf8")) 
{
    printf("utf8 karakter setinin yüklenmesinde problem oluştu: %s\n", $db_baglanti->error);
} 
else 
{
    $db_baglanti->set_charset("utf8");
}

我认为你的要点是上面列表中的第 2 点。

此外,如果您已经有一些文档,请编辑文档的元标记以进行字符集声明并使用 notepad++ encoding>convert to UTF-8 without BOM,保存您的文档,从现在开始安全地继续使用您的 UTF-8 字符。(这是一个解决可能的 HTML 相关问题的解决方案BOM

于 2014-03-26T18:51:42.593 回答