【问题标题】:PHP UTF-8 Encoding MYSQL Inserts?PHP UTF-8 编码 MYSQL 插入?
【发布时间】:2013-09-01 04:35:44
【问题描述】:

我遇到了一种非常奇怪的行为。当我使用 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,我无法更改。

【问题讨论】:

  • 同时检查您的 HTTP 标头。即使您设置了元标记,大多数浏览器也默认使用 HTTP 标头。
  • UTF-8 all the way through的可能重复
  • 似乎奇怪地用 utf-8 标头和 iso-8859-1 元标记解决了。

标签: php sql encoding utf-8 special-characters


【解决方案1】:

如果你

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

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

这是我使用的解决方案,我的母语也有很多 unicode 字符。

下面我给你介绍我的db连接php代码&推荐(使用prepared statements;请查看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 字符。 (这是针对与BOM 相关的可能的 HTML 附带问题的解决方案)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2013-03-19
    • 2012-08-02
    • 1970-01-01
    • 2017-01-20
    • 2010-12-15
    相关资源
    最近更新 更多