我在数据库话,包括特殊性质(在西班牙最主要的是,象波浪线).数据库中的一切都是保存和正确显示,带头文件,但是当我得到的数据(用PHP),并显示它在一浏览器,我得到一个奇怪的角色,像"?"与的一个广场...我需要一般的解决,所以我不需要逃脱的每个字每个时间,我也将能够插入特别班牙语的人物从一个PHP形式进入的数据库...

HTML是正确的:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

所有表和databas都设置utf8_spanish

的角色,我会得到:�

任何建议???

谢谢!

有帮助吗?

解决方案 4

将HTML charset更改为ISO-8859-1修复了问题!傻

其他提示

我想提供一些有关提出的解决方案的更多详细信息。 vartec (根据您的MySQL安装)是您问题的最正确解决方案。 首先,MySQL中的字符集/编码问题是一个有点复杂的主题,在MySQL手册中有广泛的介绍第9.1章<!>”字符集支持<!>“; 。在您的情况下,尤其是 9.1.4。 <!>“连接字符集和排序规则<!>”; 将是最相关的。

简而言之:MySQL必须知道客户端应用程序的哪个字符集/编码(从数据库说话,这是你的PHP脚本)所期望的,因为它将从内部字符集/编码中定义的所有字符串数据进行转码。 server-,database-,table-或column-level进入连接字符集/编码。您在客户端使用UTF-8,因此必须告诉MySQL您使用的是UTF-8。这是通过MySQL命令SET NAMES 'utf8'完成的,该命令必须作为打开连接的第一个查询发送。根据您的安装以及您在PHP脚本中使用的MySQL客户端库,这可以在每次连接时自动完成。

如果使用PDO,只需设置配置参数

即可
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

使用mysqli更改客户端字符集/编码更加简单:

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

我希望这有助于使整个事情更容易理解。

连接后立即发出SET NAMES 'utf8'

$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("SET NAMES 'utf8'");

让MySQL自动翻译

$conn = mysql_connect('host', 'user', 'password');
mysql_set_charset('utf8',$conn);

http://es.php.net/manual/烯/ function.mysql - 组 - charset.php

编辑:我收集你的评论,这实际上是用latin1编码的,所以

mysql_set_charset('latin1_spanish_ci',$conn);

我从某个地方找到了这个,从那时起就一直在使用它而不用太多考虑。

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");
圣洁的废话..这让我疯了。我试图做同样的事情。 我添加了一个utf-8编码HTML标题..几个小时后mysqli_set_charset()救了我,但我很高兴我现在正在使用它

另一个尝试编码特殊字符和重音的函数是htmlentities()

您可以这样做:

$link = mysql_connect("host", "user", "password");
mysql_select_db("database", $link); mysql_query("SET NAMES 'utf8';", $link);

在HTML中启用unicode编码。

在处理特殊的人物时我总是照顾如下:

  • 数据库,表格和字符集所有设置utf8_general_*或utf8_unicode_*
  • 我确定我的编辑节省PHP文件与正确的角色设定
  • 我设置default_charset在php.ini UTF-8
  • 我送一个Content-Type:text/html;charset=UTF-8头
  • Charset在META tag是UTF-8(这是复盖的内容类型HTTP header)
  • 当连接到MySQL我的问题如下问题:
    • 集名称utf8
    • 设置的字符组utf8
    • 集校对规则="utf8_general_ci"/"utf8_general_ci"

您确定数据库中有UTF8数据吗?

对我有用的答案是Stefan Gehrig发布的答案:

  

$的mysqli - GT <!>; set_charset(<!>; <!> QUOT UTF8 QUOT);

我只需要在定义连接后添加该行,并解决我遇到的问题! :)

(因为我无法发表评论,所以我发布了答案。)。

我的解决方案是: 做以上提供的所有 但我也使用notepad ++,必须保存文件 像这样:转到manu选项卡中的编码 并保存文件 - <!> gt;编码在utf8

有兴趣的是,这段代码对我不起作用:

$link = mysqli_connect('localhost', 'my_user', 'my_password', 'test');
mysqli_set_charset($link, "utf8");
printf("Current character set: %s\n", mysqli_character_set_name($link));
//shows latin1

但是,在条件内设置charset有效:

if (!mysqli_set_charset($link, "utf8")) {
    printf("Error loading character set utf8: %s\n", mysqli_error($link));
    exit();
} else {
    printf("Current character set: %s\n", mysqli_character_set_name($link));
    //shows utf8
}

我的设置:

$ rpm -qa|grep -E "php|maria"
mariadb-5.5.56-2.el7.x86_64
mariadb-server-5.5.56-2.el7.x86_64
mariadb-libs-5.5.56-2.el7.x86_64
php-pdo-5.4.16-45.el7.x86_64
php-cli-5.4.16-45.el7.x86_64
php-5.4.16-45.el7.x86_64
php-common-5.4.16-45.el7.x86_64
php-mysql-5.4.16-45.el7.x86_64
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top