-1

可能重复:
一直到 UTF-8

好吧,这很愚蠢,我无法弄清楚。

Mysql 数据库设置为 utf8_general_ci 排序规则。我遇到问题的字段是长文本类型。

添加到数据库的&eacute字符或其他重音字符返回为 �。

我运行输出stripslashes,我尝试了有和没有,html_entity_decode但在输出中找不到任何变化。我究竟做错了什么?

干杯

4

2 回答 2

2

您尝试插入的字符串具有什么字符编码?如果它在 ISO-8859-1 中,您可以使用 PHP 函数 utf8_encode() 将其编码为 UTF-8,然后再将其插入数据库。

http://php.net/manual/en/function.utf8-encode.php

于 2013-01-08T17:26:59.910 回答
1

正确编码真的很棘手 - 层太多:

  • 浏览器
  • PHP
  • MySQL

PHP 的 SQL 命令“SET CHARSET utf8”将确保客户端 (PHP) 以 utf8 格式获取数据,无论它们如何存储在数据库中。当然,首先需要正确存储它们。

DDL 定义与真实数据

为表/列定义的编码并不真正意味着数据采用该编码。如果您碰巧有一个表定义为utf8但存储为不同的编码,那么 MySQL 会将它们视为utf8并且您遇到了麻烦。这意味着你必须先解决这个问题。

检查什么

您需要检查每一层数据流的编码方式。

  • 检查 HTTP 标头,标头。
  • 检查请求正文中真正发送的内容。
  • 不要忘记 MySQL 几乎到处都有编码:
    • 数据库
    • 服务器作为一个整体
    • 客户
      确保到处都有合适的人。

转换

如果您在 eg 中接收数据windows-1250,并希望存储在 中utf-8,则在存储之前使用此 SQL:

SET NAMES 'cp1250';

如果您在 DB 中有数据windows-1250并且想要检索utf8,请使用:

SET CHARSET 'utf8';

最后一点:

不要依赖过于“智能”的工具来显示数据。例如,phpMyAdmin 确实(在我使用它时正在做)编码真的很糟糕。它贯穿所有层,所以很难找出来。此外,Internet Explorer 有非常愚蠢的行为,即根据奇怪的规则“猜测”编码。使用可以切换编码的简单编辑器。另外,我推荐 MySQL Workbench。

于 2013-01-09T02:15:13.193 回答