字符编码 - 我不明白

时间:2015-02-06 10:27:00

标签: php mysql phpmyadmin

好吧,我根本没有真正得到字符编码,我正在研究它,但我希望有人可以向我解释这里发生了什么。

在我的产品表中,我有说明。在phpMyadmin中,它看起来像这样:enter image description here

我已将编码(仅限今天)设置为utf8_general_ci。好。

现在,在我的某个产品的pLongDescription上,我有这个:

enter image description here

你看到那里有吗?这是Word或其他东西使用的一些狡猾的撇号。它不断地蔓延到我的生活中。我甚至无法在键盘上输入除了单词以外的任何内容。我更倾向于使用'代替。

无论如何,我会想到utf8_general_ci集,这不会是个问题。如果我通过PHP从数据库正常输出,我得到这个:

enter image description here

但是,如果我使用utf8_encode($pDescription),我会得到这个:

enter image description here

它们都不完美。在手边,我有一堆可怕的错误。另一方面,我的语法和拼写都不好,因为它错过了描述中的撇号。

这里发生了什么,我该如何解决?

3 个答案:

答案 0 :(得分:0)

mysql_query('SET CHARACTER SET "utf8"');
mysql_query('SET NAMES "utf8"');
ini_set('default_charset', 'UTF-8');

使用这个:)帮助我

在连接mysql之后放这个

如果您使用的是html,请不要忘记设置charset:  meta charset =“utf-8”

答案 1 :(得分:0)

试试这个:

$pDescription = mb_convert_encoding ($pDescription, "UTF-8", "UTF-8");

不要忘记在 php.ini 中停用此扩展程序extension=php_mbstring.dll,然后重新启动 Web服务器

希望有助于:)

答案 2 :(得分:0)

你正在混淆概念。您所看到的是“整理”,它表示它将如何对数据进行排序。在表级别设置编码,创建表时使用DEFAULT CHARSET = utf8(或首选charset)。 (它也可以在my.ini / my.cnf中设置为全局默认值)

然后,您需要通过为您所做的每个连接调用SET NAMES utf8(或mysql_set_charset('utf8', $link);)第一手来指示每个连接是否为utf8连接。

从现在开始,当你读出数据并用PHP输出时,它会向浏览器发送一个utf8字节流。假设您已通过设置相关的内容类型标题或类似内容指示浏览器解码它具有utf8,这将有效。

如果您的PHP文件中有任何使用扩展字符的硬编码文本,PHP文件也必须保存为utf8,因此它与DB的输出匹配(否则您将在页面上呈现混合编码)。 / p>

还有更多事情要考虑,本文有一条建议:

http://www.toptal.com/php/a-utf-8-primer-for-php-and-mysql