我得到了从 MySQL 数据库中提取数据的奇怪字符

Posted

技术标签:

【中文标题】我得到了从 MySQL 数据库中提取数据的奇怪字符【英文标题】:I got weird characters extracting data from MySQL db 【发布时间】:2011-04-06 18:14:13 【问题描述】:

嗯,我有一个 mysql 数据库,编码为 utf8_unicode_ci,它在当前应用程序中运行起来就像一个魅力(用 Code Igniter 编写)

现在,我正在开发一个新的 php 应用程序,当我尝试恢复数据时,有几个字符无法读取 - 字符在使用 phpMyAdmin 的数据库中显示正常,但是当我尝试将其放在网页中时,它变成了“ROLA �60”。

这些字符是西班牙字母,例如 ñ、á、Ó... 或 ascii 代码,例如 €、Ø...

问题出在哪里?我已将页面设置为 meta http-equiv="Content-Type" content="text/html; charset=UTF-8",我尝试了 mysql_set_charset() 函数,但仍然什么都没有。

有遇到此类问题的经验吗?

【问题讨论】:

再次尝试mysql_set_charset() 【参考方案1】:

我在我的数据库驱动应用程序中注意到了这个确切的问题,我花了很长时间才解决这个问题!

出现问题是因为您的应用程序中至少有三个地方需要定义其字符集,并且它们都必须是相同的字符集(并且该字符集必须能够处理您正在处理的字符)。

问号符号及其变体出现在浏览器不理解所传递的字符时。

确保您的字符集在以下位置匹配:

    HTML 头部部分。 数据库排序规则本身 - 当您创建新表或更改现有表的架构时,可以在 phpMyAdmin 中设置。 最容易被忽视的字符集设置:php.ini 文件的“default_charset”值(可以通过 PHP 脚本或 httpd.conf 文件设置)。

从您的帖子来看,您的 PHP 配置可能设置为使用不同的 default_charset。这意味着您的数据库将很好地存储字符,并且会将字符很好地发送到您的脚本,但是 PHP 脚本本身不知道如何处理该字符,因此会作为烦人的问号符号输出到浏览器.

尝试将 php.ini 值更改为相同的字符集,您可能会惊讶地发现字符显示正常!如果您无权访问 php.ini,可以使用以下函数更改该值:

ini_set("default_charset", "UTF-8");

希望这会有所帮助。

【讨论】:

嘿,冷静点——我遇到了这个确切的问题,所以在这里记录下来。它为我解决了这个问题,也为我们的提问者 Arthur 解决了问题。很抱歉发布“废话”,但这是您有时必须在 PHP 中做的一个小技巧。如果您长期使用 PHP,您应该知道您必须时不时地采取某些小技巧,即使它违反了文档。【参考方案2】:

如果 mysql_set_charset() 不起作用,请尝试执行

mysql_query('SET NAMES utf8');

建立连接后。

【讨论】:

【参考方案3】:

任何类型的问题只需要一种经验:了解您在做什么和调试。现在非常稀有的技能,多亏了像 *** 这样的网站。

涉及编码的级别有 3 个:

数据库级 服务器端脚本级别。 html 页面级别。

应分别检查每个。

检查 HTML 级别很容易。只需单击浏览器中的“查看”菜单,然后单击“编码”并查看标记的是哪一个。如果是对的,那你就没事。如果没有 - 发送了错误的 HTTP 标头,您必须将其改正

对于服务器端,几乎没有什么可做的。只是告诉mysql你想要哪种编码。它可以通过两种方式完成:

mysql_set_charset() - 首选 SET NAMES 查询

注意 UTF-8 编码在 mysql 中名为 utf8

数据库级别似乎没问题。在你的情况下。

【讨论】:

+1:用于mysql_query('SET NAMES utf8'); 查询。这可以解决 99% 的此类问题。 @shamittomar 实际上,如果您使用的是 mysql_real_escape_string 函数,则此解决方案比 mysql_set_charset() 最差。因为 SET NAMES 使这个函数的功能无用【参考方案4】:

mysql_query('SET NAMES utf8'); 在通过 Chrome 浏览而不是 FF 或 IE 时有效

【讨论】:

【参考方案5】:

试试下面可能会解决你的问题:

<?php
$text = "This is the Euro symbol '€'.";

echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;

?>

http://php.net/manual/en/function.iconv.php

【讨论】:

以上是关于我得到了从 MySQL 数据库中提取数据的奇怪字符的主要内容,如果未能解决你的问题,请参考以下文章

从 CNN(Xception 模型)中提取特征,我得到 IsADirectoryError?

ajax 发布后的 Phpmyadmin 奇怪的字符

如果我使用 UTF-8,HTML 上的问号字符和 SQL 数据上的奇怪字符,如果我使用 ISO-8859-1 [重复]

尝试从列表中提取字符 [关闭]

在 MySQL 中,如何从长文本字符串中提取 URL?

字谜查找程序 php mysql